Golang 内存模型

1 指令顺序调整 对于单goroutine程序代码,编译器和处理器有时会调整源码中的指令顺序来做一些优化。当然,此类调整在当前gorouine程序来看并不会改变其源码指令所指定的行为。但在多个线程共享内存的情形下,某个goroutine内部的指令顺序调整可能会影响到依赖其指令顺序的其他goroutine的行为。 看一段代码: package main import "fmt" var s string var done bool func setup() { s = "hello world" done = true if done { fmt.

阅读更多

Golang vendor文件夹使用

1 提出问题 我们知道,一个工程稍大一点,通常会依赖各种各样的包。而Go使用统一的GOPATH管理依赖包,且每个包仅保留一个版本。而不同的依赖包由各自的版本工具独立管理,所以当所依赖的包在新版本发生接口变更或删除时,会面临很多问题。 为避免此类问题,我们可能会为不同的工程设置不同的GOPATH,或者更改依赖包路径名称。这样手动维护起来也很头疼。 2 解决问题

阅读更多

LeetCode 413 等差数列切片

1 题目描述 若一个数列至少有三个元素,且任意相邻两元素的差相等,则该数列为一个等差数列。 例如,如下三个数列即为等差数列: 1, 3, 5, 7, 9 7, 7, 7, 7 3, -1, -5, -9 如下数列不是等差数列:

阅读更多