Go语言基础二:常用的Go工具命令
常用的Go工具命令
Go附带了一下有用的命令,这些命令可以简化开发的过程。命令通常包含的IDE中,从而使工具在整个开发环境中保持一致。
go run 命令
go run
命令实在开发过程中执行的最常见的命令之一,该命令将编译并执行main包(即程序的入口点)。
例如,在Go工作目录中创建main.go,将一下代码保存到main.go中。
package main
import "fmt"
func main() {
//这是一个注释
fmt.Println("Hello World!! By Go")
}
在终端下执行go run main.go
。会在命令行上打印 Hello World!! By Go
go build命令
go run
编译并执行了我们编写的代码,但是未生成独立的二进制文件。所以这里go build就有了用武之地。
go build
命令将编译我们的应用程序,包括我所有的包及其依赖项,而无需安装。这个命令会在从磁盘上生成编译后的二进制文件,但是不会执行这个文件。生成的文件遵循合理的命名约定,但是可以通过-o output
命令选项更改即将创建二进制文件的名称。
对于上一个示例,在终端输入go build main.go
,将会在你的目录下创建一个mian.exe
的可执行文件。运行该mian.exe
同样会在终端上打印Hello World!! By Go
默认情况下,生成的二进制文件包含调试信息和字符表。这会使文件变大。为减小文件所占用的空间,可以在构建过程中使用一下选项,从而从二进制文件中剥离那些信息。例如go build -ldflags "-w -s"
可以使文件大小减少30%左右。
交叉编译
go build
命令非常适合在当前系统或相同架构下运行二进制文件,同时Go提供了交叉编译(cross-compiling)来创建在不同架构上的二进制文件。
要进行交叉编译,需要设置好约束限制。就是将有关要为其编译代码的操作系统和系统架构的信息传递给build的一种方法。这些约束包括GOOS(用于操作系统)和GOARCH(用于架构)。
可以通过三种方式引入编译约束限制:命令行、代码注释、或文件拓展名约定。
//如下为使用命令行来设置约束
GOOS="linux" GOARCH="amd64" go build main.go
go doc命令
go doc
命令可以让你查询有关包、函数、方法或变量的文档。该文档作为注释嵌入代码中。
go doc
命令的输出信息是从代码的注释中获取的,只要对包、函数、方法和变量注释地足够充分,就可以通过go doc
命令来查询文档。
//如下为使用doc命令查询函数fmt.Println()的详细信息
go doc fmt.Println
//输出如下
func Println(a ...interface{}) (n int, err error)
Println formats using the default formats for its operands and writes to
standard output. Spaces are always added between operands and a newline is
appended. It returns the number of bytes written and any write error
encountered.
go get命令
当在开发Go程序时需要第三方包,要获取包的源代码,就需要用到go get
命令。
即便你在程序中已经导入了第三方包,但是你无法访问该包。首先需要运行go get
命令来下载第三方包。下载后的包将存放在$GOPATH/src目录下。
go fmt命令
go fmt
命令可以自动格式化代码。使用该命令会强制使用正确的换行、缩进和大括号对其来设置代码样式。
golint和go vet命令
go fmt
会更改代码的语法样式,而golint
会报告错误样式,例如缺少注释、不遵循约定的变量名、无用的类型规范等。注意,golint
是独立的工具而不是Go主程序的命令。
使用go vet
会检查代码并使用启发式方法来识别可疑的构造。go vet
命令尝试确定编译器可能会忽略的问题,其中一些可能是合法的错误。
其他的命令工具
go clean命令会删除掉执行其它命令时产生的一些文件和目录。
go test命令用于对Go语言编写的程序进行测试。
go list命令的作用是列出指定的代码包的信息。
go fix会把指定代码包的所有Go语言源码文件中的旧版本代码修正为新版本的代码。
go tool pprof命令来交互式的访问概要文件的内容
go install用于编译并安装指定的代码包及它们的依赖包。
最新文章
- Nginx 利用 X-Accel-Redirect response.setHeader 控制文件下载
- NOIP 2001解题报告
- (medium)LeetCode 238.Product of Array Except Self
- jquery图片放大器插件
- Log4Net 的简要配置
- 一維條碼編碼規則(1D Barcode)
- 使用Spring的JavaConfig 和 @Autowired注解与自动装配
- 如何理解Unity组件化开发模式
- Visual Studio 开发(二):VS 2017配置FFmpeg开发环境
- 谈谈MySQL优化原理
- 2017软工实践K班总结
- Python 私有
- world转html在线编辑器
- C#编程(六十八)----------LINQ小结
- 使用spring initialization创建SpringBoot项目
- 演示Microsoft Advertising SDK for Windows Phone 8.1
- 数学图形之莫比乌斯带(mobius)
- String类的编码和解码问题
- 第一个PyQt5窗口
- jQuery考试
热门文章
- pyhon对excel的xls与xlsx的读取,写入
- scrapy架构与目录介绍、scrapy解析数据、配置相关、全站爬取cnblogs数据、存储数据、爬虫中间件、加代理、加header、集成selenium
- CI/CD介绍以及jenkins安装 1.1
- 【算法】堆排序(Heap Sort)(七)
- 896.Montonic Array - LeetCode
- mac安装java环境
- SpringCloud Alibaba Sentinel 限流详解
- Python使用EasyOCR库对行程码图片进行OCR文字识别介绍与实践
- kafka消费
- C++ 炼气期之数组探幽