最后更新于2022年4月29日 13:31:19

有时候看到一些小的知识点,放在这篇博客里了

#cgo LDFLAGS:LD_LIBRARY_PATH

转义符

type user struct {
    name string
}

func main() {
    u := user{"tang"}
    //Printf 格式化输出
    fmt.Printf("% + v\n", u)     //格式化输出结构
    fmt.Printf("%#v\n", u)       //输出值的 Go 语言表示方法
    fmt.Printf("%T\n", u)        //输出值的类型的 Go 语言表示
    fmt.Printf("%t\n", true)     //输出值的 true 或 false
    fmt.Printf("%b\n", 1024)     //二进制表示
    fmt.Printf("%c\n", 11111111) //数值对应的 Unicode 编码字符
    fmt.Printf("%d\n", 10)       //十进制表示
    fmt.Printf("%o\n", 8)        //八进制表示
    fmt.Printf("%q\n", 22)       //转化为十六进制并附上单引号
    fmt.Printf("%x\n", 1223)     //十六进制表示,用a-f表示
    fmt.Printf("%X\n", 1223)     //十六进制表示,用A-F表示
    fmt.Printf("%U\n", 1233)     //Unicode表示
    fmt.Printf("%b\n", 12.34)    //无小数部分,两位指数的科学计数法6946802425218990p-49
    fmt.Printf("%e\n", 12.345)   //科学计数法,e表示
    fmt.Printf("%E\n", 12.34455) //科学计数法,E表示
    fmt.Printf("%f\n", 12.3456)  //有小数部分,无指数部分
    fmt.Printf("%g\n", 12.3456)  //根据实际情况采用%e或%f输出
    fmt.Printf("%G\n", 12.3456)  //根据实际情况采用%E或%f输出
    fmt.Printf("%s\n", "wqdew")  //直接输出字符串或者[]byte
    fmt.Printf("%q\n", "dedede") //双引号括起来的字符串
    fmt.Printf("%x\n", "abczxc") //每个字节用两字节十六进制表示,a-f表示
    fmt.Printf("%X\n", "asdzxc") //每个字节用两字节十六进制表示,A-F表示
    fmt.Printf("%p\n", 0x123)    //0x开头的十六进制数表示

2021年9月9日 17:12:50
[典藏版] Golang 调度器 GMP 原理与调度全分析
An overview of memory management in Go
Garbage Collection In Go : Part I - Semantics

2021年9月13日 14:33:21
22. 图解:Go语言中的静态类型与动态类型
获取接口值的动态类型的方法是使用%T:

var w io.Writer
fmt.Printf("%T\n", w)

写方法的时候,对象是否用指针传递

《Go语言编程》是这么写的:

Go语言中的面向对象最为直观,也无需支付额外的成本。如果要求对象必须以指针传递,这有时会是个额外成本,因为对象有时很小(比如4字节),用指针传递并不划算。
只有在你需要修改对象的时候,才必须用指针。它不是Go语言的约束,而是一种自然约束。举个例子:

func (a *Integer) Add(b Integer) {
	*a += b
}

这里为Integer类型增加了Add()方法。由于Add()方法需要修改对象的值,所以需要用指针引用。调用如下:

func main() {
	var a Integer = 1
	a.Add(2)
	fmt.Println("a =", a)
}

运行该程序,得到的结果是:a=3。如果你实现成员方法时传入的不是指针而是值(即传入Integer,而非*Integer),如下所示:

func (a Integer) Add(b Integer) {
	a += b
}

那么运行程序得到的结果是a=1,也就是维持原来的值。读者可以亲自动手尝试一下。
究其原因,是因为Go语言和C语言一样,类型都是基于值传递的。要想修改变量的值,只能传递指针。

struct怎么实例化

GIN框架的c.Next和Abort

Golang的sync.map

由浅入深聊聊Golang的sync.Map 写的比较详细
不得不知道的Golang之sync.Map解读!

Time.After容易内存泄露,用timer代替