分类 go 中的文章

go test 工具的简单介绍和使用

简单介绍 go test 子命令是 Go 语言包的测试驱动程序,在一个包目录中,以*_test.go 命名方式的文件,是 go test 编译的目标(不是 go build) 在*_test.go 文件中,三种函数需要特殊对待,即功能测试函数、基准测试函数和示例函数: 功能测试函数:以 Test 前缀命名的函数,用来检测一些程序逻辑的正……

阅读全文

golang struct 能否比较

分情况讨论 同一个 struct 实例化出来的不同对象 关键看 里边有没有不可比较的字段类型 不同struct 实例化出来的对象 是否可以强制转换——所有字段类型都可以转 是否包含:不可比较类型 可排序、可比较和不可比较 安装官方文档,可比较的类型 必须是 Assignability 可赋值性的 可排序的数据类型有三种,Integer,Flo……

阅读全文

slice 相关一道题

package main import ( "encoding/json" "fmt" ) type AutoGenerated struct { Age int `json:"age"` Name string `json:"name"` Child []int `json:"child"` } func main() { jsonStr1 := `{"age": 14,"name": "potter", "child":[1,2,3]}` a := AutoGenerated{} json.Unmarshal([]byte(jsonStr1), &a) aa := a.Child fmt.Println(aa) // output:[1,2,3] jsonStr2 := `{"age": 12,"name": "potter", "child":[3,4,5,7,8,9]}` json.Unmarshal([]byte(jsonStr2), &a) fmt.Println(aa) // output: [3,4,5] // fmt.Println(a.Child) // output: [3,4,5,7,8,9] } 解释 type AutoGenerated struct { Child []int } Then you do a := AutoGenerated{} // (1) jsonStr1 := `{"age": 14,"name": "potter", "child":[1,2,3]}` json.Unmarshal([]byte(jsonStr1), &a) // (2) aa := a.Child // (3) fmt.Println(aa) jsonStr2 := `{"age": 12,"name": "potter", "child":[3,4,5,7,8,9]}` json.Unmarshal([]byte(jsonStr2), &a) // (4) fmt.Println(aa) So, what happens: You create a variable, a, of type AutoGenerated which is initialized to the zero value for its type. Because of that, its Child field, which is a slice, is initialized to the zero value……

阅读全文

channel 总结

1. 声明和类型 ChannelType = ( "chan" | "chan" "<-" | "<-" "chan" ) ElementType . 声明 双向:var ReadAndWriteChannel chan int 仅可读:var OnlyReadChannel <- chan int 仅可写:var OnlyWriteChannel chan <- int 初始化: make(chan int) //坑:没有数据,读取阻塞,直至写入数据 make(chan int,100) // 容量 缓存 buffer 2. 操作 c := make(chan int) 读:i := <- c 写: c <- (7+2) 遍历: range c 关闭: close(c) 坑:关闭channel,可读,不可写(panic) 多值……

阅读全文