![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Golang于无微处
JaysenLeo
挖粪涂墙,星辰大海
展开
-
编译时注入变量
原理golang程序在build时自动生成版本信息,使用 ./main --version可以查看版本和build时间使用链接选项-X设置一个二进制文件中可以访问的变量源码package mainimport ( "fmt" "os" "github.com/deckarep/golang-set")var version = "no version"func main() { params := os.Args[1:] if len(params) == 0 { r原创 2021-08-25 21:10:11 · 225 阅读 · 0 评论 -
range切片与数组的原理
是否会出现无限循环package mainimport "fmt"func main() { v := []int{1, 2, 3} for i := range v { v = append(v, i) } fmt.Println(v)}输出[1 2 3 0 1 2]原理在遍历切片的时候,range语句声明之初,就将切片已经copy了一份,长度和内容// The loop we generate:// for_temp := range// .原创 2020-11-17 22:45:54 · 197 阅读 · 0 评论 -
指针问题 之 range
问题代码package mainimport "fmt"type user struct { name string sex uint // 1 男 0 女}func main() { u := []user{ {"Jansen",1}, {"Lee",1}, {"Leo Lee",0}, } n := make([]*user,0,len(u)) for _,v := range u{ n = append(n, &v) } fmt.Printl.原创 2020-11-17 21:40:08 · 220 阅读 · 0 评论 -
race问题
package mainimport "fmt"func main() { total, sum := 0, 0 for i := 1; i <= 10; i++ { sum += i go func() { total += i }() } fmt.Printf("total:%d sum %d", total, sum)}第一个问题 total 为不确定值(不是你想要的),因为total的写入是在协程里,并且增量i是闭包直接带入,加之协程的调度并非顺序导致原创 2020-11-14 14:56:56 · 251 阅读 · 0 评论