Go语言学习Tips
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Go语言学习Tips相关的知识,希望对你有一定的参考价值。
defer的边界
defer是以函数为边界的,也就是说,只有在当前函数将要退出的时候才会运行。
Nested channel select的返回
① 对于nested同一个channel select,如何想要层层返回,最好的方式就是直接close channel
package main import ( "fmt" "time" ) func main() { stopc := make(chan int) go func() { select { case <-stopc: fmt.Println("stopc 0") select { case <-stopc: fmt.Println("stopc 1") } fmt.Println("stopc 2") } }() // stopc <- 2 // stopc <- 2 close(stopc) time.Sleep(time.Second * 5) }Also SEE: Go Sandbox
Fork别人项目的正确姿势
比如,有一个项目『http://github.com/sirupsen/logrus』,你看他有点不爽想要改点东西。所以fork了一个新的项目『http://github.com/auxten/logrus』,但代码里会有很多『import "http://github.com/sirupsen/logrus/xxx"』
你直接去修改代码项目依旧会引用原版,pull request原作者又不能很快通过,急急急,这时候怎么办呢?
① go get别人代码,这里是
go get github.com/sirupsen/logrus② 给项目直接添加一个新的remote,指向你自己的repo,命令:
git remote add auxten [email protected]:auxten/logrus.git③ 创建新branch,就叫做aux吧,并且让这个branch指向这个remote。命令:
git checkout -b aux && git branch -u auxten/master aux④ 最终的.git/config大概长这样:
[core] repositoryformatversion = 0 filemode = true bare = false logallrefupdates = true ignorecase = true precomposeunicode = true [remote "origin"] url = https://github.com/sirupsen/logrus fetch = +refs/heads/*:refs/remotes/origin/* [remote "auxten"] url = [email protected]:auxten/logrus.git fetch = +refs/heads/*:refs/remotes/auxten/* [branch "aux"] remote = auxten merge = refs/heads/master [push] default = upstream⑤ push代码就用
git push -u auxten aux:master
这条命令的意思就是:push并把aux的upstream设置成auxten的master。
方法不是很完美,但是至少能比较优雅地解决本地开发编译的问题。
本文出自:https://segmentfault.com/a/1190000006913499
■欢迎关注 Reboot教育 Python实战班介绍---11月26日(周六)已开班
详情点击:http://www.51reboot.com/course/actual/
上课形式:面授班 / 网络直播班
报名QQ:979950755
本文出自 “Reboot运维开发” 博客,请务必保留此出处http://opsdev.blog.51cto.com/2180875/1884242
以上是关于Go语言学习Tips的主要内容,如果未能解决你的问题,请参考以下文章
Go 语言入门很简单--技巧和窍门(Tips and Tricks)