随笔分类 - Golang
摘要:json字符串转golang map 我们知道golang处理json字符串时,需要先转成struct,并且struct必须是确定的。 有时候我们传递的json是不固定的,针对每种情况都写一个struct比较麻烦,有没有处理不确定json的方法呢? 答案是有的 var a string = "{\"
阅读全文
摘要:golang对数组的遍历基本上有两种,一种是根据索引,一种是使用range 使用range遍历得到的是复制过的数据,并不是数组原来的数据,所以不能赋值修改数组 如果想修改数组,需要使用索引遍历的方式 type STest struct { A int B int } // 使用range遍历,无法修
阅读全文
摘要:上一篇文章介绍了比较绕的一种用法,这篇文章介绍一些golang正常使用时的一些基础 非侵入式继承 再说一下非侵入式继承,就是struct不用明确指明从哪个interface继承,只需要实现interface的接口即可,即使interface不在同一个文件。 // myinterface.go typ
阅读全文
摘要:go env -w GOPROXY=https://goproxy.cn,direct 指定使用代理下载,上面是七牛云的,也可以使用其他的。
阅读全文
摘要:Sonic 如果对性能要求非常高,可以使用Sonic。但是Sonic有一些要求,高性能必然带来特例化,官方也介绍了,对CPU架构和系统等都有要求。其底层使用了一些汇编和c的代码实现,所以如果不是对性能要求特别高,可以不用。 fastjson fastjson介绍就是非常快,不过功能相对较少。好久已经
阅读全文
摘要:结构体数组与接口数组转换 如果想把[]struct转为[]interface,我们发现直接赋值会报错。 理论上interface可以转换任何数据,为什么结构体数组不可以呢?这是因为interface的设计导致的,如果能理解interface的底层实现,就能很清楚知道如何转换了。 如图所示,与C++的
阅读全文
摘要:很多人都说用go代替php或者java的最大短板就是写业务太反人类。经过最近的一些使用,发现确实与常见的java或者c++有些区别,在这里说明一下。 go继承多态的现状 go没有类的概念 也没有所谓的继承多态。所以按照常规用法开发相应的业务逻辑,确实不适用。 go只有struct和interface
阅读全文
摘要:有时候想根据不同的参数编译不同的内容,可以在编译命令中增加参数。 ``` go build -ldflags -X main.mytest=abc ``` 在程序main函数前定义对应的变量 ``` var mytest = "" ``` 就可以直接使用拿到abc
阅读全文
摘要:开发高性能server的时候,不可避免的需要对原生socket做一些配置调优,包括设置io复用、接收发送缓存大小等 如果使用io复用,必须要设置监听socket为SO_REUSEADDR和SO_REUSEPORT。设置复用端口和地址还有个好处,就是程序崩溃后,端口监听有可能没有释放,必须要等两分钟才
阅读全文
摘要:具体原因和底层细节没有仔细看,不做描述,只说一下结果。循环获取UDP的socket数据,满速情况下(每个数据包获取后输出一下当前接收数据包总数),println比fmt.Println慢了1倍。比如发送10万个包,fmt.Println可以接收到9万多,而println只能接收4万~5万
阅读全文
摘要:虽然go提供了很多便于并发的功能,但是写出一个高性能的程序还是有一定挑战的。当程序遇到性能问题,go同样提供了比较好的工具便于分析。 # 引入net/http/pprof" ``` import ( _ "net/http/pprof" ) ``` # 在main函数最后启动http server
阅读全文
摘要:这是因为配置的GOPATH路径下有go.mod,也就是这两个不能在同一个目录下
阅读全文
摘要:有一个golang工程,没有go.mod,用goland打开,配置编译,会提示没有go.mod,但是增加了go.mod,又提示工程目录下引用的包找不到。 # 去掉go.mod  test()
阅读全文
摘要:因为配置`GOPATH`与`GOROOT`目录相同,所以报警,可以专门创建一个目录设置`GOPATH`。 `GOROOT`是下载安装go的目录,然后在环境变量`PATH`中配置好安装go目录下的bin目录,再创建一个目录配置为`GOPATH`即可
阅读全文