摘要:
如果我们写了一个程序,监听特定信号,完成某些动作,如何向进程发送这个系统信号呢。 ``` kill -SIGUSR1 1234 ``` 向进程id是1234的发送SIGUSR1信号 kill并不是杀死某个进程,只不过默认会发送一些中断信号,也可以通过它发送一些其他信号。具体有哪些信号,也可以通过ki 阅读全文
摘要:
有时候想根据不同的参数编译不同的内容,可以在编译命令中增加参数。 ``` 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 ![](https://img2023.cnblogs.com/blog/466332/202307/466332-2023 阅读全文
摘要:
有一个结构体 ``` type mystruct struct { a int } ``` 如果想为这个结构体增加一个方法,就类似于C++或者Java的类一样,有成员变量,也有成员函数,怎么实现呢?由于go没有类的概念,所以提供了一种方案。 ``` func (ms mystruct) test() 阅读全文