随笔分类 -  Golang

摘要:fix go1.15bug openssl 生成证书上 grpc 报 legacy Common Name field, use SANs or temporarily enable Common Name matching with GODEBUG=x509ignoreCN=0 最近用传统的方式 阅读全文
posted @ 2021-10-21 21:46 devhg 阅读(1168) 评论(0) 推荐(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: 阅读全文
posted @ 2021-09-21 16:16 devhg 阅读(538) 评论(0) 推荐(0)
摘要:用 dlv 调试 那有同学问了,有没有其他可以调试 Go、以及和 Go 程序互动的方法呢?其实是有的!这就是我们要介绍的 dlv 调试工具,目前它对调试 Go 程序的支持是最好的。 之前没我怎么研究它,只会一些非常简单的命令,这次学会了几个进阶的指令,威力挺大,也进一步加深了对 Go 的理解。 下面 阅读全文
posted @ 2021-09-08 20:18 devhg 阅读(667) 评论(0) 推荐(0)
摘要:Go 性能测试 基准测试 基准测试主要是通过测试CPU和内存的效率问题,来评估被测试代码的性能,进而找到更好的解决方案。 基准测试的代码文件必须以_test.go结尾 基准测试的函数必须以Benchmark开头,必须是可导出的 基准测试函数必须接受一个指向Benchmark类型的指针作为唯一参数 基 阅读全文
posted @ 2020-12-16 16:46 devhg 阅读(419) 评论(0) 推荐(0)
摘要:使用 熟悉 Golang 的朋友对于 tag、json 和 struct 都不陌生。 type Address struct { City string `json:"city"` Street string `json:"street"` ZipCode string `json:"zip_cod 阅读全文
posted @ 2020-12-07 19:45 devhg 阅读(2415) 评论(0) 推荐(0)
摘要:关于go语言编译器自动解引用 用值类型的实参调用形参为值类型的方法 用指针类型的实参调用形参为值类型的方法(会进行“自动解引用”) 用值类型的实参调用形参为指针类型的方法(会进行“自动取引用”) 用指针类型的实参调用形参为指针类型的方法 我们还是用代码来说明问题。 type node struct 阅读全文
posted @ 2020-11-30 21:16 devhg 阅读(370) 评论(0) 推荐(0)
摘要:值接收器和指针接收器 package main import "fmt" type stu struct { Name string Age int } func (s stu) changeName(name string) { s.Name = name } func (s *stu) chan 阅读全文
posted @ 2020-11-30 20:36 devhg 阅读(251) 评论(0) 推荐(0)
摘要:什么是内存对齐 以一个例子来说明,以64位系统为例 type test struct { a int32 b byte } func main() { fmt.Println(unsafe.Sizeof(test{})) // 8 } 理论上int32占4个字节,byte占一个字节,test结构体应 阅读全文
posted @ 2020-11-27 18:41 devhg 阅读(545) 评论(0) 推荐(0)
摘要: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] // 先复制 阅读全文
posted @ 2020-11-26 15:54 devhg 阅读(1136) 评论(0) 推荐(0)
摘要:持续补充 什么是内存逃逸 在c/c++中,内存的分配都是由程序决定的。导致程序员们在内存分配完了之后,总是忘记回收。这就会造成内存泄露,一次泄露可能不会导致什么,但是在递归或者循环中泄露,对程序来说可能是致命的。 在go语言中,就不会出现这样的问题,因为go自带垃圾回收。那么当在go中定义一个变量时 阅读全文
posted @ 2020-11-24 21:42 devhg 阅读(821) 评论(0) 推荐(1)
摘要:如果使用channel之前没有make,会出现dead lock错误。 至于为什么,等待研读源码补充 func main() { var x chan int go func() { x <- 1 }() <-x } /* fatal error: all goroutines are asleep 阅读全文
posted @ 2020-11-20 09:38 devhg 阅读(424) 评论(0) 推荐(0)
摘要:有多种方式可以获得Go程序的汇编代码, 尽管输出的格式有些不同,但是都是方便阅读的汇编代码,可以帮助我们更好的了解程序的底层运行方式。 我们看下面一段代码, 它是sync.Once的实现,去掉了不必要的注释,复制出来用来研究的一段小代码。 type Once struct { m sync.Mute 阅读全文
posted @ 2020-11-19 19:14 devhg 阅读(534) 评论(0) 推荐(0)
摘要:今天在写代码遇到一个问题,如下代码所示 遇到问题 func Exists() { getwd, _ := os.Getwd() fmt.Println(getwd) _, err := os.Stat(getwd) //os.Stat获取文件信息 fmt.Println(err) // <nil> 阅读全文
posted @ 2020-09-12 15:54 devhg 阅读(4071) 评论(0) 推荐(0)
摘要: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 阅读全文
posted @ 2020-08-26 23:40 devhg 阅读(1099) 评论(0) 推荐(0)