最后更新于2022年4月29日 13:31:19
有时候看到一些小的知识点,放在这篇博客里了
Go编译缓存导致C文件修改后未重新编译
劳资服了,人才
CGO调用C语言的链接库,不但要写进
#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)
2021年9月29日 11:27:48
:
2022年4月29日 13:31:25:
(七)golang–变量之基本数据类型(看这篇就够了)
写方法的时候,对象是否用指针传递
《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语言一样,类型都是基于值传递的。要想修改变量的值,只能传递指针。
golang之HashMap
struct怎么实例化
GIN框架的c.Next和Abort
Go语言利用time.After实现超时控制的方法详解
Golang的sync.map
由浅入深聊聊Golang的sync.Map
写的比较详细
不得不知道的Golang之sync.Map解读!
Time.After容易内存泄露,用timer代替