概述 调用 os 包即可。建议先阅读 创建文件 和 写文件。 例子 直接读取 package main import ( "fmt" "os" ) func main() { code, err := os.ReadFile("/tmp...
概述 调用 os 包即可。建议先阅读 创建文件。 例子 直接写入 package main import "os" func main() { code := ` package main func main() { println("hello wo...
概述 调用 os 包即可。 例子 创建文件 package main import ( "fmt" "os" ) func main() { file, err := os.Create("/tmp/test_main.go") if err != nil...
概述 调用 sync/atomic 包即可。 错误的并发操作 先来看一个错误的示例。 通过启动 1000 个 goroutine 来模拟并发调用,在函数内部对变量 number 进行自增操作,那么可能...
概述 调用 time.NewTicker() 方法即可。 例子 package main import ( "fmt" "time" ) func main() { ticker := time.NewTicker(time.Second) defer tick...
概述 利用 channel (通道) 和 time.After() 方法实现超时控制。 例子 package main import ( "fmt" "time" ) func main() { ch := make(chan bool) go f...
概述 对于任一共享资源,同一时间保证只有一个操作者,这种方法称为 互斥机制。 关键字 Mutex 表示互斥锁类型,它的 Lock 方法用于获取锁,Unlock 方法用于释放锁。在 Lo...
概述 select 类似 switch, 包含一系列逻辑分支和一个可选的默认分支。每一个分支对应通道上的一次操作 (发送或接收),可以将 select 理解为专门针对通道操作的 switch 语...
概述 建议先阅读 goroutine。 在 goroutine 小节中,为了让并发的 3 个 goroutine 正常执行完成,调用 time.Sleep() 睡眠等待。这样的方式存除了实现不优雅之外,最大的...
概述 建议先阅读 range, 非缓冲通道, 缓冲通道。 range 除了可以遍历字符串、切片、数组等数据结构外,还可以遍历通道。 语法规则 和遍历其他数据结构不同,遍历通道时没...
概述 建议先阅读 非缓冲通道, 缓冲通道, 关闭通道,通道方向。 Go 语言没有提供函数或方法判断一个通道是否关闭。因此只能使用一个变通的办法:接收通道元素,根据返回的...
概述 通道的方向分为 发送 和 接收。默认情况下,通道是双向的 (同时发送和接收),但是可以通过标识符指明通道为单向 (只读或只写)。 语法规则 可读写通道 (同时支持发送...
概述 建议先阅读 阻塞通道 和 非阻塞通道 小节。在前面的两个小节中, 为了最小化代码达到演示效果,省略了 关闭通道 的步骤,正确的做法应该是在通道使用完成后关闭。...
概述 Go 箴言: 不要通过共享内存来通信,而要通过通信来共享内存。 阻塞通道与非阻塞通道 通过关键字 chan + 数据类型 来表明通道数据类型,调用 make() 函数来初始化一...
概述 建议先阅读 goroutine 小节。 Go 箴言: 不要通过共享内存来通信,而要通过通信来共享内存。 goroutine 是 Go 程序并发执行的实体,channel (通道) 则是它们之间的连...
社交账号:
我要举报该,理由是: