【go】求推荐go语言开发工具及go语言应该以哪种目录结构组织代码?
go语言的开发工具推荐?
go语言开发普通程序及开发web程序的时候,应该以哪种目录结构组织代码?
回答
IDE
我用过几个:vscode,sublime,goglang,vim,liteide,不能说哪个好,都列出来好了:
sublime(gosublime),目前比较好用的Go环境,也是我在用的,唯一的缺点,有些时候代码不能自动跳转。
vscode这个是我个人的习惯问题,我习惯import一个包之后按快捷键保存一下,然后vscode的go插件就会自动把我刚引入的包给剔除掉,WTF。不过vscode的java插件做的挺好,快赶得上IDE了。vscode没有sublime跳转不成功的问题,很好用。
goglang,也是比较好的插件,唯一的缺点:他会去索引你的GOPATH,那么好了,第一次索引的时候,你不仅可以去喝杯咖啡,还能顺便吃一大块切糕。并且他是jetbrains家的,也就是说,java写的,对CPU要求还是比较高的,像我的macbook pro跑起来经常会有点小卡。并不是在黑谁,java在服务端性能和Go差不多,有些测评比Go好,有些测评比Go差,都很接近C的性能,但是intellij,phpstorm,eclipse这一系列的IDE,用起来很耗CPU,经常会占用100%。goglang没有sublime跳转不成功的问题。
vim(vim-go),不说了,不习惯vim的人用起来都是蛋疼。至于习惯用vim的,自然会去试试。
以前的版本,liteide有部分问题,不能跳转,翻页蛋疼,但是现在的版本都修复的七七八八了,很好用。
代码组织
原则上,是能放在GOPATH的代码,就不要放在别的地方,能够按照GOPATH/git地址放的代码,就不要直接放在GOPATH里。
有些人喜欢项目根目录只有一个main.go,然后直接go build即可,
有些喜欢项目根目录啥也没有,有一个cmd目录,然后cmd目录分为子目录,分别为可能生成的命令。
有些人喜欢代码全放在根目录。
看个人喜好。
配套工具
godoc
这种常用(大雾)的工具就不说了。
gofmt
这种常用(也是大雾)工具也不说了,你只要用上面我提到的工具,那么都会提供格式化,有些会提供保存时自动格式化。可以做成git的pre-commit的钩子,每次commit之前帮你格式化一下,用法如下:http://paste.ubuntu.com/24381...
go test
go test其实是比较常用的工具,写benchmark和测试用例都有用。
我喜欢push代码之前做一个pre-commit的钩子,
其实他还有一个很好玩的功能:
segmentfault的传图有问题,贴一个效果图吧:
https://github.com/envimate/g...
go pprof 和 trace
这(两)个是必备的,性能调优很有用。
pprof用于宏观调优,trace用于微观调优。
pprof的内容网上有很多,不贴了,
trace的内容在这里:
标题:Go调优神器trace介绍
http://mp.weixin.qq.com/s?__b...
包管理器
govendor,glide,godep,官方有dep。不过我总觉得是官方骗star,明明有三个好比较好用的了,还要做一个新的(大雾)。
godeps因为是最早出来,所以一般而言,用的最多。
如果你看某些工程有Godeps目录的话,说明这个工程已经有些年头了,没有Godeps目录而有这个文件的话,说明用的也是godeps。我个人不太喜欢这个东西,两个原因:1.增加了一个奇奇怪怪的Godeps目录(文件),比较碍眼。2.去年下半年用godep编译telegraf的时候,发现他为了编译成功,是会根据你配置的依赖包和tag/commit,去把你GOPATH下的相关目录强制reset到该tag/commit,这样用起来比较脏,破坏了个人的GOPATH。
glide用的也比较多。
govendor用的比较少,并且是在1.5之后出现的(1.5增加了一个特性,vendor目录),所以govendor就只是管理vendor目录的,(不负责任安利一波),很符合我个人对vendor目录管理的要求:vendor目录管理器就应该在vendor目录增加一个配置文件专门用来存储依赖库的信息,而不是在工程其他地方增加依赖库的信息,也不会去像godep一样去改你GOPATH中的其他源码的分支。
好了不要听我扯淡,如果你决定不了用哪个包管理器,那么
可以用commit最多的
可以用最顺眼的
可以都用
dep是官方的,肯定有前途。
gotests
第三方插件,用于自动生成测试用例。(说实话工具命令行参数设计的有点蛋疼,不好用,但是问题不大)
https://github.com/cweill/got...
效果图:
https://github.com/cweill/GoT...
其他奇奇怪怪的第三方工具
第三方工具很多,我只说对写代码有帮助的工具。
比如gojson,根据给出的json生成结构体。(不止gojson一个,但是一个就够了)
比如go目前没有泛型,会有各路人写各种generate工具生成一个伪泛型。
go-bindata,根据静态文件生成go,直接效果是将文件直接嵌入Go代码,静态文件可以直接……
比如直接从结构体生成数据库操作的工具argen等。
只有你想不到的,很少有你找不到的。
至于常用什么库
这是另一个问题了
更新:专门吐槽gogland
今晚重新打开了一下gogland,果然需要重新索引目录。这是一个漫长、蛋疼而又风扇狂转的过程。
除此之外,gogland的单步调试等功能还是很好用的,我不建议程序员总是依赖这个功能,但是偶尔用一次是无可厚非的。
更新:继续吐槽
这是gogland,代码代码都更新了,还是有问题…(其实就是代码更新的有点慢……)
另外:今天遇到某些代码,vscode跳转不了,但是sublime反而可以跳转。
atom 墙内装包可能有问题
vscode
goland 还没正式发布
vim
其他编辑器
组织结构可以参考你使用框架的教程
推荐gogland
我是统一一个gopath , 然后src/github.com/username/project/package/subpackage 这种结构
然后用glide 管理第三方库
ide用户可以用idea,vim或emacs用户可以尝试spacemacs。go自带一系列工具,用啥编辑器都没大差。
目录可以参考优秀的go的OSS代码,比如etcd或docker,大致要点是
可执行文件放在cmd/cmd_name/下
尽量少分package,每个package实现一个功能,尽量让文件保存flat
go很容易重构,一开始其实随便放都可以,但注意能别public的都别public
包管理方面如大家所说用glide,其实你直接把vendor目录push上去也没所谓的,重要的是写个makefile。我自己是写了一个make deps,把要go get的包和glide install全写上去,那肯定不会有装不了的包。然后注意维护这个文件,以后ci和cd都很方便。
听问题楼主应该go刚学,其实随便放就好了,错了目录又compile不了,能compile的都很容易gomvpkg,gorename,先把东西做出来吧
其实go官方的工具链已经做得非常好了,基本主流的编辑器都有很好的体验。 vim、vscode、atom都支持得非常好, 个人推荐vscode。
项目结构可以参考一些开源项目。
golang的ide 我用的liteide最好用
我正在用sublime text,很好用!
gogland不错,代码组织可以参考一下标准库
IDE
目前用户最多的是 vscode 和 atom
go自己的工具链是齐的,这两个还额外有 delve ,debug工具,用过都说好,能追踪 goroutines。 回答里有人说的保存了没引用的
import 就会被删掉这是 goimports的功能,在设置里可以选成 gofmt就好了。 可是 goimports
还可以自动给你加上忘记 import 的包呢。而且格式化了import的顺序,团队合作必备。
gogland 只是预览版,连beta都没到。因为 idea 的机制,它不能用很多go的工具,都是自己在慢慢实现。但也提供了很多更酷炫的功能。 自己用可以,团队合作暂时还不推荐。
vim 党和 emacs 党相信不会来问这样的问题
代码组织
可以参考github上不错的项目
go 的推荐方式,只要不是超大项目,都是直接平铺的,不设文件夹。
因为 go 的机制,在文件夹中,它就成了一个新的 package, 你就要注意 变量和函数的首字母大小写来区别是否导出。
目前看来beego那样组织代码在go的世界中是特立独行的。实践证明也会带来很多不便的。
推荐还是起好每个文件的名字,所有文件平铺在一个目录就好了。
最近总结了下go的目录结构给你参考基于beego框架的go项目目录结构
IDE
JetBrains(他们家的IDE没的说)的Gogland的,现在是测试版,免费试用。
代码组织结构
参考 echo框架,基本是平铺的。
推荐vscode
VScode 没毛病
其实用哪个都差不多,主要是看你用哪个顺手,以前做java开发的,所以对idea比较顺手
以上是 【go】求推荐go语言开发工具及go语言应该以哪种目录结构组织代码? 的全部内容, 来源链接: utcz.com/a/100291.html