Golang八股文(-1)小知识点收集

  • Post author:
  • Post category:golang


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

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


golang errgroup的用法及用处


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怎么实例化


golang语言中struct的初始化方式



GIN框架的c.Next和Abort


gin框架中间件c.Next()理解




Go语言利用time.After实现超时控制的方法详解



Golang的sync.map


由浅入深聊聊Golang的sync.Map

写的比较详细


不得不知道的Golang之sync.Map解读!



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


Golang time.After内存泄漏分析



版权声明:本文为weixin_44445507原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。