关于对「Don't communicate by sharing memory, share memory by communicating」的理解

Golang编程谚语(Proverbs)中有这么一句: Don’t communicate by sharing memory, share memory by communicating. 即:不要使用共享内存通信,用通信来实现数据的共享。 首先 Go 的并发原语 (goroutines 和 channels) 为构造并发软件提供了一种优雅而独特的手段. Go 鼓励使用 channels 在 goroutines 之间传递对数据的拷贝, 而不是显式地使用锁来调解对共享数据的访问. 这种方法确保只...

五月 20, 2024 · 4 分钟 · 1803 字 · ZhangYong

Golang 数组与切片

数组和切片的异同 数组是定长的,是一片连续的内存,其长度是类型的一部分,定义好之后就不能再更改,比如 [3]int 和 [4]int 就是不同的类型。 所以在日常开发中,我们更多使用的是切片(slice)。 slice 实际上是一个结构体,包含三个字段:长度、容量、底层数组,可以动态扩容,更加灵活。 // runtime/slice.go type slice struct { array unsafe.Pointer // 元素指...

一月 19, 2023 · 3 分钟 · 1412 字 · ZhangYong

Go中的指针和二级指针

Go语言指针基础 什么是指针 简单来说指针是存储另一个变量的内存地址的变量。 在上图中,变量 b 的值被定义为252并存储在内存地址 0x1040a124 上。 变量 a 保存 b 的地址,现在 a 指向 b。 声明指针 package main import ( "fmt" ) func main() { b := 252 var a *int = &b fmt.Printf("a 的类型为:%T\n", a) fmt.Println("b的地址...

十一月 28, 2022 · 5 分钟 · 2121 字 · ZhangYong

Golang中defer函数的使用

基本概念 defer 是 Go 语言中的一个关键字,用于延迟(推迟)一个函数或方法的执行,直到包含它的函数执行完毕时才会被调用,无论包含它的函数是通过 return 正常结束还是由于 panic 导致的异常结束。 defer 语句通常用于资源的释放、解锁以及确保某些关键操作的完成。 参数求值与陷阱 在 Go 中,defer 语句中的函数参数会在 defer...

八月 8, 2022 · 2 分钟 · 860 字 · ZhangYong