当前位置: 首页 > news >正文

go build

go build

作用:将Go语言程序和相关依赖编译成可执行文件

go build 无参数编译

生成当前目录名的可执行文件并放置于当前目录下,如:

go build

go build+文件列表

编译同目录的多个源码文件时,可以在 go build 的后面提供多个文件名,go build 会编译这些源码,输出可执行文件,“go build+文件列表”的格式如下:
go build file1.go file2.go…
可执行文件默认选择文件列表中第一个源码文件作为可执行文件名输出,如:

go build upload.go main.go

使用“go build+文件列表”编译方式编译时,文件列表中的每个文件必须是同一个包的 Go 源码。
注意:如果go build main.go,但是main.go调用了同包的其他文件,会报错。

$ tree -L 2
└── main├── main.go└── hello.go

main.go内容如下:

package mainfunc main() {println("this is function main")hello()println(A)
}

hello.go内容如下:

package mainvar A string = "AA"func hello() {println("this is function hello")
}

因为同一个包下,并没有import语句,不会自动导入。解决:go build main.go hello.go

$ go build main.go
# command-line-arguments
.\main.go:5:2: undefined: hello
.\main.go:6:10: undefined: A

go build+包

可以直接根据包名进行编译,即便包内文件被增(加)删(除)也不影响编译指令。

下面的命令用于构建同一个包,虽然它们的写法各不相同:

$ cd $GOPATH/src/gopl.io/ch1/helloworld
$ go build

或者

$ cd anywhere
$ go build gopl.io/ch1/helloworld

或者

$ cd $GOPATH
$ go build ./src/gopl.io/ch1/helloworld

但不能这样

$ cd $GOPATH
$ go build src/gopl.io/ch1/helloworld
Error: cannot find package "src/gopl.io/ch1/helloworld".

go build 还有一些附加参数,可以显示更多的编译信息和更多的操作,详见下表所示。

附加参数备 注
-v编译时显示包名
-p n开启并发编译,默认情况下该值为 CPU 逻辑核数
-a强制重新构建
-n打印编译时会用到的所有命令,但不真正执行
-x打印编译时会用到的所有命令
-race开启竞态检测,常用于并发模式下的共享变量检测
-o后接文件名,强制对输出的文件进行重命名
-work打印编译工作的临时目录
-gcflags后面的参数可以是多个,用空格进行分隔,并用 ""进行包裹,这些参数将传递到 go tool compile 工具中进行调用。例如,go build -gcflags "-l -m"
-ldflags后面的参数可以是多个,用空格进行分隔,并用 ""进行包裹,这些参数将传递到 go tool link 工具中进行调用。例如,go build -ldflags “-w -s”。这个命令可以隐藏所有代码实现相关的信息,并减少生成文件的大小。其中,-w 可以移除调试信息(无法使用gdb 调试),-s 可以移除符号表
http://www.lryc.cn/news/302984.html

相关文章:

  • 力扣238和169
  • Android 基础技术——Framework
  • JavaWeb 中的静态资源访问
  • asp.net web api 用户身份验证
  • 3DTile是不是没有坐标的选择?
  • 数据采集三防平板丨三防平板电脑丨停车场应用
  • 解决git push时的too_many_commits提示
  • GPT-4助力我们突破思维定势
  • 【前端工程化面试题】什么是 CI/CD
  • kafka的安装,用于数据库同步数据
  • Bean 的作用域你知道么 ?
  • Windows 使设置更改立即生效——并行发送广播消息
  • PostgreSQL使用session_exec和file_fdw实现失败次数锁定用户策略
  • Jmeter实现阶梯式线程增加的压测
  • Linux----防火墙之保存规则
  • spring-orm:6 HibernateJpaVendorAdapter源码解析
  • php捕获Fatal error错误与异常处理
  • PyCharm 调试过程中控制台 (Console) 窗口内运行命令 - 实时获取中间状态
  • MacBook Pro如何安装rust编程环境
  • SparkUI任务启动参数介绍(148个参数)
  • nginx 安装
  • 手撕扩散模型(一)| 训练部分——前向扩散,反向预测代码全解析
  • linux 防火墙
  • Go应用性能分析实战
  • MySQL的索引类型
  • picker选择器-年月日选择
  • 【LeetCode-494】目标和(回溯动归)
  • 力扣 188. 买卖股票的最佳时机 IV
  • 【Go语言】Go项目工程管理
  • 美容小程序:让预约更简单,服务更贴心