
Golang
力行云
热爱技术,热爱开源
展开
-
Go编译时注入版本号预定信息
通常将go程序编译可执行程序,我们会这样:go build -o top main.go生成 top 可以执行文件。如果我们需要在编译时传入版本号,在go1.5以后:go build -ldflags "-X demo/examples/cmd/lib.version=0.1.1" -o top main.go注意:-X 后面要写完整的包路径。version变量所在的代码片段:执行结果如下:...原创 2022-04-13 22:26:07 · 1107 阅读 · 0 评论 -
关于GOMAXPROCS的设置
G-P-M模型我们知道在Go scheduler中,G代表goroutine, P代表Logical Processor, M是操作系统线程。在绝大多数时候,其实P的数量和M的数量是相等。 每创建一个p, 就会创建一个对应的M只有少数情况下,M的数量会大于Pgolang runtime是有个sysmon的协程,他会轮询的检测所有的P上下文队列,只要 G-M 的线程长时间在阻塞状态,那么就重新创建一个线程去从runtime P队列里获取任务。先前的阻塞的线程会被游离出去了,当他完成阻塞操作后会触发原创 2022-04-01 10:54:01 · 7897 阅读 · 0 评论 -
macOS配置golang开发环境
安装包下载地址:go1.17.7更多版本完成下载后,双击安装即可。配置原创 2022-02-28 20:43:08 · 713 阅读 · 0 评论 -
Golang项目运行
重定向标准输出:> file.log 2>&1> 创建和重写文件,>>创建和追加文件 使用文件描述符: 空/dev/null,输入0,输出1,错误2 > file.log 或者 1>file.log 标准输出写入到file中重定向标准和错误输出: &来合并输出2>&1将错误重定向并合并标准输出上 > file.log 2>&1 标准输出和错误信息写入到文件nohup ./cmd args ...原创 2022-02-25 15:54:18 · 758 阅读 · 0 评论 -
Go项目打包
#!/usr/bin/env bashSOURCE_FILE_NAME=mainTARGET_FILE_NAME=appbuild(){ echo $GOARCH $GOARCH tname=${TARGET_FILE_NAME}_${GOOS}_${GOARCH}${EXT} env GOOS=$GOOS GOARCH=$GOARCH \ go build -o ${tname} \ -v ${SOURCE_FILE_NAME}.go chmod +x ${tname}}#ma原创 2022-02-25 15:22:57 · 578 阅读 · 0 评论 -
排序算法之插入排序
import "fmt"func main() { numbers := []int{6, 2, 7, 3, 8, 5} fmt.Println(insertSort(numbers))}func insertSort(a []int) []int { len := len(a) for i := 1; i < len; i++ { tmp := a[i] key := i - 1 for key >= 0 && tmp < a[key] {.原创 2022-02-16 16:17:15 · 201 阅读 · 0 评论 -
Golang开发库
文章目录aircopiernowCarbonfsnotifyantstestifygothgo-flagsairGo 语言的热加载工具,它可以监听文件或目录的变化,自动编译,重启程序。大大提高开发期的工作效率。https://github.com/cosmtrek/aircopierI am a copier, I copy everything from one to anotherhttps://github.com/jinzhu/copiernowNow is a time原创 2022-01-25 14:51:29 · 219 阅读 · 0 评论 -
反射的使用示例
反射 reflection通过反射可以动态的调用方法反射可以通过TypeOf 和 ValueOf函数从接口中获取目标对象信息利用反射修改对象状态反射会将匿名字段作为独立字段通过反射获取对象的类型和值示例如下:package mainimport ( &quot;fmt&quot; &quot;reflect&quot;)type User struct { Id int N原创 2019-02-26 10:26:46 · 1570 阅读 · 0 评论 -
go并发的基础知识
Channel是阻塞同步的通过make创建,close关闭Channel是引用类型可以使用for range 来迭代不断操作channel可以设置单向或双向通道可以设置缓存大小,在未被填满前不会发生阻塞Select可以处理一个或多个channel的发送与接收同时有多个可用的channel时按随机顺序处理可用空的select来阻塞main函数可设置超时一个...原创 2019-02-26 16:42:06 · 170 阅读 · 0 评论