Go 编译 && 工具
编译和工具链
Go 的工具链非常丰富,从获取源码、编译、文档、测试、性能分析,到源码格式化、源码提示、重构工具等应有尽有
- 在 Go 中可以使用测试框架编写单元测试,使用统一的命令行即可测试及输出测试报告的工作
- 基准测试提供可自定义的计时器和一套基准测试算法,能方便快速地分析一段代码可能存在的 CPU 耗用和内存分配问题
- 性能分析工具可以将程序的 CPU 耗用、内存分配、竞态问题以图形化方式展现出来
build 命令
Go 的编译速度非常快(并发编译),并且以 GOPATH 作为工作目录和一套完整的工程目录结构规则(GOPATH 需要提前配置好)
使用 go build 命令将源码编译为可执行文件,有很多种编译方法,如无参数编译、文件列表编译、指定包编译等,使用这些方法都可以输出可执行文件
准备代码目录结构
代码目录结构(位置是 ./src/part_9_compile)
demo:main.go 模块中 main() 函数调用了同包模块 lib.go 里面的 pkgFunc() 函数

main.go 代码:
package main
import "fmt" func main(){
//同包函数
pkgFunc()
fmt.Println("main func call")
}
lib.go 代码:
package main
import "fmt" func pkgFunc(){
fmt.Println("call pakFunc success")
}
无参数编译
如果源码中没有依赖 GOPATH 的包的引用,那么这些源码可以使用无参数 go build 编译:

go build + 文件列表

go build + 包
包名的路径是相对于 GOPATH 下的 src 目录开始的

添加 -o 参数可以指定输出可执行文件的文件名,例如:
go build -o main part_9_compile/go_build
go build 编译时的附加参数
表中的附加参数按使用频率排列,根据需要选择进行使用
| 附加参数 | 备 注 |
|---|---|
| -v | 编译时显示包名 |
| -p n | 开启并发编译,默认情况下该值为 CPU 逻辑核数 |
| -a | 强制重新构建 |
| -n | 打印编译时会用到的所有命令,但不真正执行 |
| -x | 打印编译时会用到的所有命令 |
| -race | 开启竞态检测 |
go install 命令
go install 的功能与 go build 类似,附加参数绝大多数都可以与 go build 通用,只是将编译的中间文件放在 GOPATH 下的 pkg 目录下,以及固定地将编译结果放在 GOPATH 下的 bin 目录中
go install 是建立在 GOPATH 上的,无法在其它的目录中使用 go install,生成的可执行文件的名称来自编译时的包名,无法使用 -o 参数指定文件名
run 命令
Python 语言可以在不输出二进制的情况下,将代码使用解释器边编译边执行,Go 虽然不使用解释器,但可以使用 go run 命令来达到同样的效果
go run 命令会编译源码,并且执行源码的 main() 函数,不会在当前目录生成可执行文件,工作目录为当前目录
在 go run 的后面可以添加参数,这部分命令行参数,可以被传入到程序内部进行接收
package main
import (
"flag"
"fmt"
) func main(){
// 接收命令行参数,key,默认值,帮助
var mode *string = flag.String("mode", "", "process mode") var level int
flag.IntVar(&level, "level", 0, "process level") flag.Parse()
fmt.Println(*mode, level)
} 调用:
go run main.go --mode="production" --level=1 运行结果:
production 1
后续补充 ~
Go 编译 && 工具的更多相关文章
- koala预编译工具的使用
Koala是一个开源的预处理语言图形编译工具,目前已支持Less.Sass.Compass与CoffeeScript. 安装Koala 在Koala官网根据你的系统平台下载对应的版本.Linux系统要 ...
- apk反编译工具
反编译工具: apktool:资源文件获取,可以提取出图片文件和布局文件进行使用查看 dex2jar:将apk反编译成Java源码(classes.dex转化成jar文件) jd-gui:查看APK中 ...
- less及编译工具介绍
什么是LESSCSS LESSCSS是一种动态样式语言,属于CSS预处理语言的一种,它使用类似CSS的语法,为CSS的赋予了动态语言的特性,如变量.继承.运算.函数等,更方便CSS的编写和维护. LE ...
- eclipse安装反编译工具
身为一名程序员来说,日常最常做的就是编写代码和查看别人写好的源代码了,有时候打开别人写的class文件发现根本不是自己想要的,所以给大家介绍一种eclipse中反编译class文件的工具. 第一步:下 ...
- Koala – 开源的前端预处理器语言图形编译工具
koala 是一个前端预处理器语言图形编译工具,支持 Less.Sass.Compass.CoffeeScript,帮助 Web 开发者更高效地使用它们进行开发.跨平台运行,完美兼容 Windows. ...
- .net混淆、反编译工具调查
常用的工具列表[比较常见的] 混淆器.加密 Dotfuscator VS默认带的工具,不过是个社区版 强度不大 dotNET Reactor 使用了NativeCode 和混淆的形式 Xenocode ...
- Android反编译工具的使用-Android Killer
今天百度搜索“Android反编译”搜索出来的结果大多数都是比较传统的教程.刚接触反编译的时候,我也是从这些教程慢慢学起的.在后来的学习过程中,我接触到比较方便操作的Android反编译.在这,我将使 ...
- iOS系统提供开发环境下命令行编译工具:xcodebuild
iOS系统提供开发环境下命令行编译工具:xcodebuild[3] xcodebuild 在介绍xcodebuild之前,需要先弄清楚一些在XCode环境下的一些概念[4]: Workspace:简单 ...
- Less/Sass编译工具,koala使用指南
如果你正在使用sass.less或coffee,而没有注意到koala, 那说明你可能已经好久没有更新你的知识库了.koala这个由国人编写的,用于编译sass.less.coffee利器,在最近的短 ...
- Eclipse反编译工具Jad及插件JadClipse配置
Jad是一个Java的一个反编译工具,是用命令行执行,和通常JDK自带的java,javac命令是一样的.不过因为是控制台运行,所以用起来不太方便.不过幸好有一个eclipse的插件JadClipse ...
随机推荐
- Spring Boot Metrics监控之Prometheus&Grafana(转)
欢迎来到Spring Boot Actuator教程系列的第二部分.在第一部分中,你学习到了spring-boot-actuator模块做了什么,如何配置spring boot应用以及如何与各样的ac ...
- idea-debug启动会卡住不动,BeanPostProcessors (for example: not eligible for auto-proxying),报错解决
debug启动会卡住不动,run模式启动正常 debug启动输出到下面这行之后,就不会继续输出了 爆出各种 [INFO]- Bean 'dataSource' of type [class Druid ...
- windows10 环境下的amqp安装步骤(图文)
安装PHP扩展ampq 查看phpinfo()信息 下载ampq扩展 下载地址:http://pecl.php.net/package/amqp 选择一个dll版本下载,本文选择的是1.9.3 自己根 ...
- ABAP DEMO so批量导入
*&---------------------------------------------------------------------* *& Report YDEMO_015 ...
- Swift4.0复习协议
1.协议的定义: /// 定义一个协议MyProt protocol MyProt { /// 声明了一个实例方法foo, /// 其类型为:() -> Void func foo() ...
- replicationController 使用
[root@lab2 nginx-harbor]# cat http-test.yaml apiVersion: v1 kind: ReplicationController metadata: na ...
- 基于TreeSoft实现异构数据同步
一.为了解决数据同步汇聚,数据分发,数据转换,数据维护等需求,TreeSoft将复杂的网状的同步链路变成了星型数据链路. TreeSoft作为中间传输载体负责连接各种数据源,为各种异构数据库之 ...
- 高级UI-沉浸式设计
关于沉浸式设计,在国内指的是Toolbar和系统状态栏相统一,而谷歌官方给出的沉浸式则是指整个界面为UI所用,而这里所说的沉浸式则是指的前者,涉及4.4和5.0及以上,4.4以下的Android做不出 ...
- 使用fiddl模拟弱网
原文地址:https://www.jianshu.com/p/71c3b4a49930 Fiddler-弱网设置 1.打开fiddler,点击 Rules->Performance-> 勾 ...
- Semi-supervised learning for Text Classification by Layer Partitioning
本文是arxiv上一篇较短的文章,之所以看是因为其标题中半监督和文本分类吸引了我.不过看完之后觉得所做的工作比较少,但想法其实也挺不错. 大多数的半监督方法都选择将小扰动施加到输入向量或其表示中,这种 ...