随笔分类 - Golang
摘要:fix go1.15bug openssl 生成证书上 grpc 报 legacy Common Name field, use SANs or temporarily enable Common Name matching with GODEBUG=x509ignoreCN=0 最近用传统的方式
阅读全文
摘要:I also encountered the same problem! Does anyone know how to solve it? google/protobuf/descriptor.proto: File not found. google/api/annotations.proto:
阅读全文
摘要:用 dlv 调试 那有同学问了,有没有其他可以调试 Go、以及和 Go 程序互动的方法呢?其实是有的!这就是我们要介绍的 dlv 调试工具,目前它对调试 Go 程序的支持是最好的。 之前没我怎么研究它,只会一些非常简单的命令,这次学会了几个进阶的指令,威力挺大,也进一步加深了对 Go 的理解。 下面
阅读全文
摘要:Go 性能测试 基准测试 基准测试主要是通过测试CPU和内存的效率问题,来评估被测试代码的性能,进而找到更好的解决方案。 基准测试的代码文件必须以_test.go结尾 基准测试的函数必须以Benchmark开头,必须是可导出的 基准测试函数必须接受一个指向Benchmark类型的指针作为唯一参数 基
阅读全文
摘要:使用 熟悉 Golang 的朋友对于 tag、json 和 struct 都不陌生。 type Address struct { City string `json:"city"` Street string `json:"street"` ZipCode string `json:"zip_cod
阅读全文
摘要:关于go语言编译器自动解引用 用值类型的实参调用形参为值类型的方法 用指针类型的实参调用形参为值类型的方法(会进行“自动解引用”) 用值类型的实参调用形参为指针类型的方法(会进行“自动取引用”) 用指针类型的实参调用形参为指针类型的方法 我们还是用代码来说明问题。 type node struct
阅读全文
摘要:值接收器和指针接收器 package main import "fmt" type stu struct { Name string Age int } func (s stu) changeName(name string) { s.Name = name } func (s *stu) chan
阅读全文
摘要:什么是内存对齐 以一个例子来说明,以64位系统为例 type test struct { a int32 b byte } func main() { fmt.Println(unsafe.Sizeof(test{})) // 8 } 理论上int32占4个字节,byte占一个字节,test结构体应
阅读全文
摘要:package main import "fmt" func main() { people := [][2]int{ {7, 0}, {4, 4}, {27, 1}, {5, 0}, {6, 1}, {5, 2}, } //把{27, 1}插到第一个位置 p := people[2] // 先复制
阅读全文
摘要:持续补充 什么是内存逃逸 在c/c++中,内存的分配都是由程序决定的。导致程序员们在内存分配完了之后,总是忘记回收。这就会造成内存泄露,一次泄露可能不会导致什么,但是在递归或者循环中泄露,对程序来说可能是致命的。 在go语言中,就不会出现这样的问题,因为go自带垃圾回收。那么当在go中定义一个变量时
阅读全文
摘要:如果使用channel之前没有make,会出现dead lock错误。 至于为什么,等待研读源码补充 func main() { var x chan int go func() { x <- 1 }() <-x } /* fatal error: all goroutines are asleep
阅读全文
摘要:有多种方式可以获得Go程序的汇编代码, 尽管输出的格式有些不同,但是都是方便阅读的汇编代码,可以帮助我们更好的了解程序的底层运行方式。 我们看下面一段代码, 它是sync.Once的实现,去掉了不必要的注释,复制出来用来研究的一段小代码。 type Once struct { m sync.Mute
阅读全文
摘要:今天在写代码遇到一个问题,如下代码所示 遇到问题 func Exists() { getwd, _ := os.Getwd() fmt.Println(getwd) _, err := os.Stat(getwd) //os.Stat获取文件信息 fmt.Println(err) // <nil>
阅读全文
摘要:go mod 模式下安装cobra 只有指明版本号才能成功安装 ➜ ~ go get -u github.com/spf13/cobra/cobra@v1.0.0 go: finding github.com/spf13/cobra/cobra v1.0.0 go: finding github.c
阅读全文