golang

Go 系列教程 —— 33. golang中struct、json、map互相转化

我的未来我决定 提交于 2019-11-30 05:48:56
结构体生成Json ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 package main import ( "encoding/json" "fmt" ) type IT struct { Company string `json: "-" ` //此字段不会输出到屏幕 //Company string `json:"company"` 这样打印输出别名首字母就会小写(二次编码) Subjects []string `json: "subjects" ` //二次编码 IsOk bool `json: ",string" ` Price float64 `json: ",string" ` } func main() { //定义一个结构体变量,同时初始化 s := IT{ "itcast" , []string{ "Golang" , "PHP" , "Java" , "C++" }, true, 666.666} //编码,根据内容生成json文本 //buf, err := json.Marshal(s) //buf = {"subjects":["Golang","PHP","Java","C++"],"IsOk":"true","Price":"666

111

帅比萌擦擦* 提交于 2019-11-30 05:34:03
结构体生成Json ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 package main import ( "encoding/json" "fmt" ) type IT struct { Company string `json: "-" ` //此字段不会输出到屏幕 //Company string `json:"company"` 这样打印输出别名首字母就会小写(二次编码) Subjects []string `json: "subjects" ` //二次编码 IsOk bool `json: ",string" ` Price float64 `json: ",string" ` } func main() { //定义一个结构体变量,同时初始化 s := IT{ "itcast" , []string{ "Golang" , "PHP" , "Java" , "C++" }, true, 666.666} //编码,根据内容生成json文本 //buf, err := json.Marshal(s) //buf = {"subjects":["Golang","PHP","Java","C++"],"IsOk":"true","Price":"666

golang标准库-strings

依然范特西╮ 提交于 2019-11-30 04:31:34
字符串处理 字符串在开发中经常用到,包括用户的输入,数据库读取的数据等,我们经常需要对字符串进行分割、连接、转换等操作 字符串操作 下面这些函数来自于strings包,这里介绍一些我平常经常用到的函数,更详细的请参考官方的文档。 1.前缀和后缀 HasPrefix 判断字符串s是否以prefix开头: 函数签名 strings.HasPrefix(s, prefix string) bool HasSuffix 判断字符串 s 是否以 suffix 结尾: 函数签名 strings.HasSuffix(s, suffix string) bool 示例: package main import ( "fmt" "strings" ) func main(){ str1 := "this is a example strings" fmt.Println(strings.HasPrefix(str1, "th")) fmt.Println(strings.HasSuffix(str1, "gs")) } Contains 字符串包含关系 func Contains(s, substr string) bool 功能:字符串s中是否包含substr,返回bool值 示例代码: fmt.Println(strings.Contains("seafood", "foo")) fmt

详解golang net之TCP底层

≡放荡痞女 提交于 2019-11-30 03:37:48
golang版本1.12.9;操作系统:readhat 7.4 golang的底层使用epoll来实现IO复用。netPoll将文件描述符与底层进行了绑定。netpoll实现了用户的与底层网络IO相关的goroutine阻塞/非阻塞管理。 对netpoll的介绍按照这篇 文章 的思路按照tcp建链中的listen/accept/read/write/close动作详解过程。 下面以TCP为例完整解析TCP的建链/断链以及读写过程 listen流程: ListenTCP --> listenTCP --> internetSocket --> socket --> listenStream unix的listen函数用于将一个socket转换为监听socket。golang中同时结合了创建socket的步骤。 // src/net/tcpsock.gofunc ListenTCP(network string, laddr *TCPAddr) (*TCPListener, error) { switch network { //支持tcp协议为”tcp4“和“tcp6”,当使用"tcp"时可以通过地址格式进行判断 case "tcp", "tcp4", "tcp6": default: return nil, &OpError{Op: "listen", Net: network,

golang goroutine 协程原理

大城市里の小女人 提交于 2019-11-30 03:03:02
一、goroutine简介 goroutine是go语言中最为NB的设计,也是其魅力所在,goroutine的本质是协程,是实现并行计算的核心。goroutine使用方式非常的简单,只需使用go关键字即可启动一个协程,并且它是处于异步方式运行,你不需要等它运行完成以后在执行以后的代码。 go func()//通过go关键字启动一个协程来运行函数 二、goroutine内部原理 概念介绍 在进行实现原理之前,了解下一些关键性术语的概念。 并发 一个cpu上能同时执行多项任务,在很短时间内,cpu来回切换任务执行(在某段很短时间内执行程序a,然后又迅速得切换到程序b去执行),有时间上的重叠(宏观上是同时的,微观仍是顺序执行),这样看起来多个任务像是同时执行,这就是并发。 并行 当系统有多个CPU时,每个CPU同一时刻都运行任务,互不抢占自己所在的CPU资源,同时进行,称为并行。 进程 cpu在切换程序的时候,如果不保存上一个程序的状态(也就是我们常说的context--上下文),直接切换下一个程序,就会丢失上一个程序的一系列状态,于是引入了进程这个概念,用以划分好程序运行时所需要的资源。因此进程就是一个程序运行时候的所需要的基本资源单位(也可以说是程序运行的一个实体)。 线程 cpu切换多个进程的时候,会花费不少的时间,因为切换进程需要切换到内核态

golang 基础(二)

感情迁移 提交于 2019-11-30 02:44:04
接口 接口 -> 是一种 类型!!! 一种抽象的类型 接口(interface)定义了一个对象的行为规范,只定义规范不实现,由具体的对象来实现规范的细节。 接口类型 在Go语言中接口(interface)是一种类型,一种抽象的类型。 interface是一组method的集合,是duck-type programming的一种体现。 接口做的事情就像是定义一个协议(规则),只要一台机器有洗衣服和甩干的功能,我就称它为洗衣机。 不关心属性(数据),只关心行为(方法)。 为了保护你的Go语言职业生涯,请牢记接口(interface)是一种类型。 为什么要使用接口 type Cat struct{} func (c Cat) Say() string { return "喵喵喵" } type Dog struct{} func (d Dog) Say() string { return "汪汪汪" } func main() { c := Cat{} fmt.Println("猫:", c.Say()) d := Dog{} fmt.Println("狗:", d.Say()) } 上面的代码中定义了猫和狗,然后它们都会叫,你会发现main函数中明显有重复的代码,如果我们后续再加上猪、青蛙等动物的话,我们的代 码还会一直重复下去。那我们能不能把它们当成“能叫的动物”来处理呢?

为什么设计beego和设计的思路

懵懂的女人 提交于 2019-11-30 01:02:52
很多人会问为什么有那么多框架了,还要去实现一个框架呢?是不是大家都有自己实现框架的情节,我可以肯定的说不是,我说一下为什么设计beego的初衷 还记得当初写书的时候,我纯粹只是想把自己在学习Go语言中的一些体会写出来,由于我以前主要从事PHP和python的Web开发,所以想写一本Go如何来做Web实战的经验,刚开始的时候书的目录里面根本就没有框架实现这些章节,是写到后来发现其实对于Web开发者来说,一个微型的框架是非常有利于大家学习一个语言和快速进行应用开发的。 我以前经常用PHP的CI框架和python的tornado框架,这些框架都是非常轻量级的,轻量级就有利于我们: 第一节约我开发中一些常见问题的处理,用户只需要关注逻辑层面的东西 第二轻量级以至于他们的代码也是非常清晰的,我们可以通过阅读他们的源码来学习和体会这门语言的一些细节 第三对于项目开发者来说可以基于这些框架进行改造以适应自己的项目,从而实现二次框架的创造 所以基于上面这些的考虑,我就想实现一个类似这些语言的轻量级框架,所以我就在书的最后设计了两个章节来介绍和实现beego框架,这就是当初写beego框架的初衷。 有了这个初衷之后我就开始设计beego的执行逻辑,由于Go语言和python的思路比较接近,所以我就参考了tornado的思路来设计beego

golang Map

风格不统一 提交于 2019-11-30 00:59:45
/* go字典 字典是go语言内置的关联数据类型 因为数组是索引对应数组元素 而字典是建对应值 */ package main import ( "fmt" ) func main() { //创建一个字典可以使用内置函数make //make(map[建类型][值类型]) m:=make(map[string]int) //设置 m["k1"] = 1 m["k2"] = 2 fmt.Println(m) v1 := m["k1"] //内置函数delete从字典删除一个建对应的值 delete(m, "k2") _, ok := m["k2"] //你可以使用 :=同时定义和初始化一个字典 n := map[string]int{"foo":1, "bar":2} } 来源: https://blog.csdn.net/boshuzhang/article/details/100984964

golang 格式“占位符”%d,%f,%s等应用类型

拥有回忆 提交于 2019-11-30 00:57:39
golang 的fmt 包实现了格式化I/O函数,类似于C的 printf 和 scanf。 红色部分为常用占位符 对于 %g/%G 而言,精度为所有数字的总数,例如:123.45,%.4g 会打印123.5,(而 %6.2f 会打印123.45)。 %e 和 %f 的默认精度为6 对大多数的数值类型而言,宽度为输出的最小字符数,如果必要的话会为已格式化的形式填充空格。 而以字符串类型,精度为输出的最大字符数,如果必要的话会直接截断。 来源: https://blog.csdn.net/WTUDAN/article/details/100983953

golang协程

依然范特西╮ 提交于 2019-11-30 00:03:00
/* go 并行功能 goroutine是一个轻量级的线程 */ package main import ( "fmt" ) func f(from string) { for i := 0; i < 3; i++ { fmt.Println(i) } } /* 知识点: go 函数 go func(){}() fmt.Scanln() //等待终端输入 */ func main() { f("direct") go f("goroutine") go func(msg string){ fmt.Println(msg) }("going") var input string fmt.Scanln(&input) fmt.Println("done") } 来源: https://blog.csdn.net/boshuzhang/article/details/100976715