美文网首页
GO 奇技淫巧

GO 奇技淫巧

作者: Robin92 | 来源:发表于2019-01-18 20:22 被阅读16次

    执行顺序

    import --> const --> var --> init()
    
    image.png

    开发速度快

    • 编译快,因为只关注被直接引入的库
    • 强类型,省略了许多心力检查类型错误。

    并行而非并发

    大多数语言线程是并发,即在某一时间段来看,是多个任务一起执行,但在某一时间点,其实只执行了一个。
    并行是在同一时间点一同执行的多个任务(利用了多核)。

    小细节

    • goroutine 可以充分利用多核 cpu(runtime.GOMAXPROCS(n) 可以设置),是协程,类似线程,但比线程更轻量,占资源更少。像 java 也用了多核,但开启和关闭一个线程开销很大。
    • go 使用了组合设计模式,只需简单将一个类型嵌入到另一个类型,就能复用所有功能。
    • go 使用了行为建模,意思是实现了这些行为(方法),就是继承了这个接口。
    • go 的垃圾回收机制是交给了编译器来做,虽然会有一些额外开销,但降低了开发难度。
    • import _ <package> 引入了包并执行了它的 init() 函数。
    • go 的找包过程是找 go 的安装目录 /usr/local/go 下和 $GOPATH 下找的,所以如果 go get 安装不成功,可以按包名与目录名的对应关系将包 copy 到对应目录下。
    • go clean main.go 可以删除 go build main.go 生成的 main 可执行文件。
    • go build ./package/path/... 三个点表示匹配所有字符串,即本级目录及以下所有的包。
    • go build . 表示以当前包名作为名称生成当前的可执行文件。
    • go doc [<package>|<builtin directive>] 生成文档
    • godoc -http=:8088 可生成本地所有包的文档,并映射到 http8088 端口
    • 在项目中用 xxx.go 写上包名,相当于一个空文件,可以添加注释用于注释专用文档。
    • Golang 中 time.Time 类型的零值对应的时间戳是个负值,表示的是 0001年01月01日;而 mongoDB中 date 的零值对应的时间戳是0,表示的是 1970年01月01日。因此这点要注意引起的 bug。
    • Golang 的 cast 包中,string 转换为 int 的方法,会将 “08”开头的字符串当做8进制处理,因而得到结果 0 或对应的8进制数据。
    • Golang 的数组是值类型的,而不是指针类型,所以 arr2 = arr1 后,更新 arr1 中的一个元素,arr2对应的元素不改变。PHP 中也是不变的,但 javascript 不一样,js中的 array 是引用类型。
    • golang 在 github 上建立了一个镜像库,如 https://github.com/golang/net 即是 https://golang.org/x/net 的镜像库,所以可以在 $GOPATH/src/golang.org/xgit clone https://github.com/golang/net.git。其他包一样。

    相关文章

      网友评论

          本文标题:GO 奇技淫巧

          本文链接:https://www.haomeiwen.com/subject/vslodqtx.html