Golang
Golang
土豆吞噬者
这个作者很懒,什么都没留下…
展开
-
Golang学习笔记-测试
Go的标准库提供了几个与测试有关的库,其中最主要的是testing包,testing包需要与go test命令以及源代码中所有以_test.go后缀结尾的测试文件一同使用,一般测试文件的名字都会与被测试源码文件的名字相对应,例如main.go的测试文件名为mian_test.go。功能测试为了测试源代码,我们需要在测试文件中创建具有以下格式的测试函数,其中Xxx首字符必须是大写的英文字母,在测...原创 2019-12-29 13:49:21 · 231 阅读 · 0 评论 -
Golang学习笔记-Context
有时候一个功能可能涉及多个goroutine的调用,当该功能中途需要取消时,需要通知其它goroutine,这个时候Context就可以派上用场了,Context主要用来处理退出通知以及上下文数据传递问题。Context之间被设计为父子关系,要创建Context,首先要创建根节点,通常是context.Background(),该Context不能被取消,没有值,也没有过期时间。有了根节点后,...原创 2019-12-27 23:06:09 · 263 阅读 · 0 评论 -
Golang学习笔记-定时器
Timer使用time.NewTimer()创建Timer后,经过其指定的时间后,它会向其管道发送当前时间。time.After()也是创建Timer,不过返回值不是Timer而是其管道。package mainimport ( "fmt" "sync" "time")func main(){ //5秒后将当前时间发送给管道 timer:=time.NewTimer(t...原创 2019-12-27 01:04:43 · 243 阅读 · 0 评论 -
Golang学习笔记-反射
反射让我们可以在运行时获取对象的类型信息,比如查看一个结构体有多少字段,查看函数的入参类型和返回值类型等。Go提供了reflect.TypeOf()和reflect.ValueOf获取任意对象的reflect.Value和reflect.Type,其中reflect.Type是一个接口类型,该接口提供了很多方法让我们获取类型信息,而reflect.Value是一个结构体,它提供了很多方法让我们获...原创 2019-12-18 23:50:30 · 256 阅读 · 0 评论 -
Golang学习笔记-sync
Mutexsync.Mutex为互斥锁,同一时间只能有一个goroutine获得互斥锁。使用Lock()加锁,Unlock()解锁,加锁前不能解锁,加锁后不能继续加锁。已经锁定的 Mutex 并不与特定的 goroutine 相关联,可以利用一个 goroutine 对其加锁,再利用其他 goroutine 对其解锁。适用于同一时间只能有一个goroutine访问资源的场景。下面的代...原创 2019-12-17 23:24:26 · 285 阅读 · 0 评论 -
Golang学习笔记-zerolog
zerolog是一个高性能,支持日志等级,钩子的结构化日志库。log的Print()和Printf()方法默认输出到os.Stderr,默认日志等级为debug,用法和官方log库相同。package mainimport ( "github.com/rs/zerolog" "github.com/rs/zerolog/log")func main(){ zerolog.Tim...原创 2019-12-15 17:36:32 · 2152 阅读 · 0 评论 -
Golang学习笔记-flag
使用flag包可以用来解析命令行参数,flag.TypeVar()用于定义参数并绑定到指定变量,flag.Type()用于定义参数并将参数绑定到返回的指针,定义时可以指定参数名称,默认值,使用说明。定义完参数后调用flag.Parse()进行解析,flag.PrintDefaults()用于打印所有已定义参数的默认值和使用说明。命令行参数的语法有如下三种形式,其中前面的减号可以是两个,整数类型可...原创 2019-12-15 00:10:56 · 369 阅读 · 0 评论 -
Golang学习笔记-go mod
环境变量设置环境变量GO111MODULE可设置三种值:on,off,auto,off表示使用GOPATH模式,on表示开启模块支持,根据go.mod下载和查找依赖,auto(默认值)表示根据当前目录启用或禁用模块支持,仅当当前目录位于$GOPATH/src之外并且其本身包含go.mod文件或位于包含go.mod文件的目录下时,才启用模块支持。环境变量GOPROXY可设置下载依赖时使用的代理,...原创 2019-10-05 21:26:00 · 515 阅读 · 0 评论 -
Golang学习笔记-并发
goroutinegoroutine是Go内置的轻量级线程,它的调度由Go运行时管理,调用函数时前面加上关键字go就可以让函数在goroutine中执行。func print123(){ for i:=0;i<3;i++{ time.Sleep(time.Millisecond*100) fmt.Println(i+1) }}func...原创 2019-09-04 17:27:56 · 182 阅读 · 0 评论 -
Golang学习笔记-接口和错误
接口Go接口定义了方法后,其它类型只要实现了这些方法就是实现了接口。type Person interface { speak()}type Student struct {}type Worker struct {}func (student Student) speak(){ println("I am student")}func (worke...原创 2019-09-04 15:23:36 · 204 阅读 · 0 评论 -
Golang学习笔记-map
Map是一些键值对的集合,可以使用内置函数make或map关键字来定义Map:var map_variable map[key_data_type]value_data_typemap_variable := make(map[key_data_type]value_data_type)func main() { var numberMap map[string] int ...原创 2019-09-04 14:29:21 · 128 阅读 · 0 评论 -
使用Golang转发HTTP流数据
package mainimport ( "fmt" "net/http")func main() { http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { _, _ = w.Write([]byte("fm transfer")) }) http.HandleFunc("/fm", hand...原创 2019-08-13 00:31:11 · 4776 阅读 · 0 评论 -
Golang学习笔记-基础知识
包Go源文件中非注释的第一行需要指明这个文件属于哪个包,每个 Go 应用程序都包含一个名为 main 的包,package main表示一个可独立执行的程序。要使用其它包的代码需要使用import引入包。package mainimport ( "fmt")func main() { fmt.Println("Hello, World!")}标识符当标识符(...原创 2019-08-26 18:33:19 · 240 阅读 · 0 评论 -
Golang学习笔记-基本类型
整型类型名称有无符号大小int8是1字节int16是2字节int32是4字节int64是8字节uint8否1字节uint16否2字节uint32否4字节uint64否8字节int是编译的目标平台为32位时占4字节,64位占8字节uint否编译的目标平台为32位时占4字节,64位占8...原创 2019-08-29 11:34:21 · 189 阅读 · 0 评论 -
Golang学习笔记-变量,常量,运算符
变量Go变量命名和C语言一样,由字母、数字、下划线组成,其中首个字符不能为数字,声明变量的形式为:var identifier typevar identifier1, identifier2 type例如:var strValue stringvar intValue1,intValue2 int如果没有初始化,则变量默认为零值(数值类型为0,布尔类型为false,字符串为空字...原创 2019-08-30 10:59:20 · 251 阅读 · 0 评论 -
Golang学习笔记-条件语句,循环语句
Go的条件语句,循环语句和C很像,不同的是Go的条件表达式可以不用括号扩起来,除此之外还有这些不同:switch语句switch分支中的代码执行完后会跳出switch代码块,如果我们需要执行后面的 case,可以使用fallthrough。func main() { a:=1 switch a { case 0: fmt.Println("a is 0...原创 2019-08-30 15:43:07 · 312 阅读 · 0 评论 -
Golang学习笔记-函数
Go函数定义格式如下:func function_name( [parameter list] ) [return_types] { 函数体}例如:func add(n1, n2 int) int{ return n1 + n2}Go函数可以返回多个值,这个时候返回值类型要用括号括起来,例如:func div(n1, n2 int) (int,int){ return ...原创 2019-09-01 22:46:52 · 279 阅读 · 0 评论 -
Golang学习笔记-数组和切片
Go数组声明需要指定元素类型以及元素个数,格式如下:var variable_name [SIZE] variable_typevar values [10] intGo使用大括号初始化数组中的元素,如果元素没有指定初始值,默认为零值。func main() { var values=[10] int{1,2,3,4} println(values[0])//1 ...原创 2019-09-02 11:17:17 · 439 阅读 · 0 评论 -
Golang学习笔记-结构体
定义结构体的格式如下:type struct_variable_type struct { member definition; member definition; ... member definition;}type Book struct { id int name string author string}初始化结构体的格式如...原创 2019-09-03 15:44:48 · 271 阅读 · 0 评论 -
Golang学习笔记-交叉编译
Golang 支持交叉编译,在一个平台上生成另一个平台的可执行程序,最近使用了一下,非常好用,这里备忘一下。Mac 下编译 Linux 和 Windows 64位可执行程序CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build main.goCGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build main.go...原创 2019-08-15 23:46:00 · 380 阅读 · 0 评论