Files
build-web-application-with-…/1.3.md
2012-10-28 21:00:50 +08:00

6.7 KiB
Raw Blame History

1.3 Go 命令

Go 命令

Go语言自带有一套完整的命令操作工具你可以通过在命令行中执行go来查看它们:

这些命令对于我们平时编写的代码非常有用,接下来就让我们了解一些常用的命令。

go build

这个命令主要用于测试编译。在包的编译过程中,若有必要,会同时编译与之相关联的包。

  • 如果是普通包就像我们在1.2节中编写的mymath包那样,当你执行go build之后,它不会产生任何文件。如果你需要在$GOPATH/pkg下生成相应的文件,那就得执行go install了。

  • 如果是main包,当你执行go build之后,它就会在当前目录下生成一个可执行文件。如果你需要在$GOPATH/bin下生成相应的文件,同样需要执行go install

  • 如果某个项目文件夹下有多个文件,而你只想编译某个文件,就可在go build之后加上文件名,例如go build a.gogo build命令默认会编译当前目录下的所有go文件。

  • 你也可以指定编译输出的文件名。例如1.2节中的mathapp应用,我们可以指定go build -o astaxie.exe默认情况是你的package名就是你的文件夹名称。

实际上package名在Go语言规范中指代码中“package”后使用的名称此名称可以与文件夹名不同。默认生成的可执行文件名是文件夹名。

  • go build会忽略目录下以“_”或“.”开头的go文件。

  • 如果你的源代码针对不同的操作系统需要不同的处理,那么你可以根据不同的操作系统后缀来命名文件。例如有一个读取数组的程序,它对于不同的操作系统可能有如下几个源文件:

    array_linux.go
    array_darwin.go
    array_windows.go
    array_freebsd.go
    

go build的时候会选择性地编译以系统名结尾的文件linux、darwin、windows、freebsd。例如Linux系统下面编译只会选择array_linux.go文件其它系统命名后缀文件全部忽略。

go clean

这个命令是用来移除当前源码包里面编译的文件的。这些文件包括

_obj/            旧的object目录由Makefiles遗留
_test/           旧的test目录由Makefiles遗留
_testmain.go     旧的gotest文件由Makefiles遗留
test.out         旧的test记录由Makefiles遗留
build.out        旧的test记录由Makefiles遗留
*.[568ao]        object文件由Makefiles遗留

DIR(.exe)        由go build产生
DIR.test(.exe)   由go test -c产生
MAINFILE(.exe)   由go build MAINFILE.go产生

我一般都是利用这个命令进行清除编译文件然后github递交源码在本机测试的时候这些编译文件都是和系统相关的但是对于源码管理来说没必要

go fmt

有过C/C++经验的读者会知道,一些人经常为代码采取K&R风格还是ANSI风格而争论不休。在go中代码则有标准的风格。由于之前已经有的一些习惯或其它的原因我们常将代码写成ANSI风格或者其它更合适自己的格式这将为人们在阅读别人的代码时添加不必要的负担所以go强制了代码格式比如左大括号必须放在行尾不按照此格式的代码将不能编译通过为了减少浪费在排版上的时间go工具集中提供了一个go fmt命令 它可以帮你格式化你写好的代码文件,使你写代码的时候不需要关心格式,你只需要在写完之后执行go fmt <文件名>.go,你的代码就被修改成了标准格式,但是我平常很少用到这个命令,因为开发工具里面一般都带了保存时候自动格式化功能,这个功能其实在底层就是调用了go fmt。接下来的一节我将讲述两个工具,这两个工具都自带了保存文件时自动化go fmt功能。

go get

这个命令是用来动态获取远程代码包的目前支持的有BitBucket、GitHub、Google Code和Launchpad。这个命令在内部实际上分成了两步操作第一步是下载源码包第二步是执行go install。下载源码包的go工具会自动根据不同的域名调用不同的源码工具对应关系如下

BitBucket (Mercurial Git)
GitHub (Git)
Google Code Project Hosting (Git, Mercurial, Subversion)
Launchpad (Bazaar)

所以为了go get 能正常工作你必须确保安装了合适的源码管理工具并同时把这些命令加入你的PATH中。其实go get支持自定义域名的功能,具体参见go help remote

go install

这个命令在内部实际上分成了两步操作:第一步是go build第二步会把编译好的东西move到$GOPATH/pkg或者$GOPATH/bin

go test

执行这个命令,会自动读取源码目录下面名为*_test.go的文件,生成并运行测试用的可执行文件。输出的信息类似

ok   archive/tar   0.011s
FAIL archive/zip   0.022s
ok   compress/gzip 0.033s
...

默认的情况下不需要任何的参数它会自动把你源码包下面所有test文件测试完毕当然你也可以带上参数详情请参考go help testflag

go doc

很多人说go不需要任何的第三方文档例如chm手册之类的其实我已经做了一个了chm手册),因为它内部就有一个很强大的文档工具。

如何查看相应package的文档呢
例如builtin包那么执行`go doc builtin`
如果是http包那么执行`go doc net/http`
查看某一个包里面的函数,那么执行`godoc fmt Printf`
也可以查看相应的代码,执行`godoc -src fmt Printf`

通过命令在命令行执行 godoc -http=:端口号 比如godoc -http=:8080。然后在浏览器中打开127.0.0.1:8080你将会看到一个golang.org的本地copy版本通过它你可以查询pkg文档等其它内容。如果你设置了GOPATH在pkg分类下不但会列出标准包的文档还会列出你本地GOPATH中所有项目的相关文档,这对于经常被墙的用户来说是一个不错的选择。

其它命令

go还提供了其它很多的工具例如下面的这些工具

go fix 用来修复以前老版本的代码到新版本例如go1之前老版本的代码转化到go1
go version 查看go当前的版本
go env 查看当前go的环境变量
go list 列出当前全部安装的package
go run 编译并运行Go程序

LastModified

  • Id