【go】求推荐go语言开发工具及go语言应该以哪种目录结构组织代码?

  1. go语言的开发工具推荐?

  2. go语言开发普通程序及开发web程序的时候,应该以哪种目录结构组织代码?

回答

IDE

我用过几个:vscode,sublime,goglang,vim,liteide,不能说哪个好,都列出来好了:

  1. sublime(gosublime),目前比较好用的Go环境,也是我在用的,唯一的缺点,有些时候代码不能自动跳转。

  2. vscode这个是我个人的习惯问题,我习惯import一个包之后按快捷键保存一下,然后vscode的go插件就会自动把我刚引入的包给剔除掉,WTF。不过vscode的java插件做的挺好,快赶得上IDE了。vscode没有sublime跳转不成功的问题,很好用。

  3. goglang,也是比较好的插件,唯一的缺点:他会去索引你的GOPATH,那么好了,第一次索引的时候,你不仅可以去喝杯咖啡,还能顺便吃一大块切糕。并且他是jetbrains家的,也就是说,java写的,对CPU要求还是比较高的,像我的macbook pro跑起来经常会有点小卡。并不是在黑谁,java在服务端性能和Go差不多,有些测评比Go好,有些测评比Go差,都很接近C的性能,但是intellij,phpstorm,eclipse这一系列的IDE,用起来很耗CPU,经常会占用100%。goglang没有sublime跳转不成功的问题。

  4. vim(vim-go),不说了,不习惯vim的人用起来都是蛋疼。至于习惯用vim的,自然会去试试。

  5. 以前的版本,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中的其他源码的分支。

好了不要听我扯淡,如果你决定不了用哪个包管理器,那么

  1. 可以用commit最多的

  2. 可以用最顺眼的

  3. 可以都用

  4. dep是官方的,肯定有前途。

gotests

第三方插件,用于自动生成测试用例。(说实话工具命令行参数设计的有点蛋疼,不好用,但是问题不大)

https://github.com/cweill/got...

效果图:
https://github.com/cweill/GoT...

其他奇奇怪怪的第三方工具

第三方工具很多,我只说对写代码有帮助的工具。

比如gojson,根据给出的json生成结构体。(不止gojson一个,但是一个就够了)

比如go目前没有泛型,会有各路人写各种generate工具生成一个伪泛型。

go-bindata,根据静态文件生成go,直接效果是将文件直接嵌入Go代码,静态文件可以直接……

比如直接从结构体生成数据库操作的工具argen等。

只有你想不到的,很少有你找不到的。

至于常用什么库

这是另一个问题了

更新:专门吐槽gogland

今晚重新打开了一下gogland,果然需要重新索引目录。这是一个漫长、蛋疼而又风扇狂转的过程。

【go】求推荐go语言开发工具及go语言应该以哪种目录结构组织代码?

除此之外,gogland的单步调试等功能还是很好用的,我不建议程序员总是依赖这个功能,但是偶尔用一次是无可厚非的。

更新:继续吐槽

这是gogland,代码代码都更新了,还是有问题…(其实就是代码更新的有点慢……)

【go】求推荐go语言开发工具及go语言应该以哪种目录结构组织代码?

另外:今天遇到某些代码,vscode跳转不了,但是sublime反而可以跳转。

  1. IDEA装上go插件 或 gogland,功能强大,这里有一些使用技巧

  2. web程序的话一般一些框架会对代码结构有要求,参考框架文档即可

  • atom 墙内装包可能有问题

  • vscode

  • goland 还没正式发布

  • vim

  • 其他编辑器

组织结构可以参考你使用框架的教程

推荐gogland

我是统一一个gopath , 然后src/github.com/username/project/package/subpackage 这种结构
然后用glide 管理第三方库

  1. ide用户可以用idea,vim或emacs用户可以尝试spacemacs。go自带一系列工具,用啥编辑器都没大差。

  2. 目录可以参考优秀的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

回到顶部