go中生成可执行文件

文章目录

  • go中生成可执行文件
    • 一、简介
    • 二、使用
    • 三、示例
      • 3.1 带参数编译
        • 3.1.1 目标go文件
      • 3.2 多文件编译
      • 3.3 go项目编译
    • 四、其它
      • 4.1 go install
      • 4.2 go目录结构

一、简介

这里介绍对go项目进行打包编译生成可执行文件,其实包含参数的传递、目标可执行文件类型、打包对象。

二、使用

go项目的编译命令为go build,编译包,生成可执行文件(包含main包),默认生成位置在当前目录下。 (注意不能生成包文件)。如下:

go build
参数有:
-ldflags:用于编译时设置变量值
-o:指定编译生成的目标文件名
-v:编译时显示包名另外编译预设变量:
GOOS:指定编译生成可执行文件的运行系统,常用的有:windows、linux、darwin
GOARCH:指定编译生成可执行文件的运行系统架构,常用的有:amd64、arm

其中参数传递-ldflags的二级参数为:

-X:设置包中的变量值
-s:去掉符号表,异常时没有文件名或行号信息
-w:去掉DWARF调试信息

三、示例

3.1 带参数编译

3.1.1 目标go文件

这里目标go文件param_main.go我放在with_param目录下。

package main
import "fmt"//参数定义,由外部传值
var (Env stringVersion string
)
func main() {fmt.Printf("Env:%s Version:%s \n", Env, Version)
}

编译命令:

GOOS=darwin GOARCH=amd64 go build  -o "with_param/param_main" -ldflags "-w -s -X main.Env=test -X main.Version=1.0" with_param/param_main.go

运行编译命令后,后成可执行文件param_main,执行文件后,输出:

Env:test Version:1.0

3.2 多文件编译

在multi目录下新建目标go文件hello.go和multi_main.go,如下:

package main
func DoHello(name string) {println("hello " + name)
}
package main
func main() {println("execute main")DoHello("apple")
}

编译命令:

GOOS=darwin GOARCH=amd64 go build  -o "multi/multi_main"  multi/multi_main.go multi/hello.go

运行编译命令后,后成可执行文件multi_main,执行文件后,输出:

execute main
hello apple

3.3 go项目编译

go项目编译直接在项目根目录下编译即可(不需要单独指定编译目录),如:

GOOS=darwin GOARCH=amd64 go build  -o "targte_exe" -ldflags "-w -s -X main.Env=test -X main.Version=1.0"

四、其它

4.1 go install

除了使用go build编译外,还可以使用go install,直接生成库。

  • 编译包文件(没有main包)后,编译的包放到pkg目录下($GOPATH/pkg)
  • 生成可执行文件(有main包)后,可执行文件放到bin目录下($GOPATH/bin)

4.2 go目录结构

项目结构目录结构通常为:

根路径下:
src:源文件
pkg:包文件
bin:可执行文件

go中生成可执行文件相关推荐

  1. C++ 笔记(01)— 环境设置(安装g++、g++ 编译 C++、 生成可执行文件流程、解释器与编译器区别)

    1. g++安装 在 Linux 或者 UNIX 系统上,可以通过下面命令来查看是否安装了 GCC . $ g++ -v 如果已经安装 GNU 编译器,则有以下输出: wohu@wohu:~/C++$ ...

  2. 一个C/C++程序从编译到最终生成可执行文件的全过程分析

    一个C/C++程序从编译到最终生成可执行文件的全过程分析 C源程序->编译预处理->编译->优化程序->汇编程序->链接程序->可执行文件  1.编译预处理  读取 ...

  3. QT5生成可执行文件总结

    转载自:https://blog.csdn.net/helaisun/article/details/51810082 环境:win7 32位 运行Qt5.6 所需外部软件:upx391w,Enigm ...

  4. C/C++程序从编译到最终生成可执行文件的过程分析

    转载http://apps.hi.baidu.com/share/detail/32660500 C/C++程序编译步骤 如何生成可执行文件 ***************************** ...

  5. C语言编译链接生成可执行文件四大步骤:预处理(-E)->编译(-S)->汇编(-c) ->链接

    文章目录 一.编译过程简介 1.预处理器 2.编译器 3.汇编器 二.链接过程简介 1.静态链接: 由链接器在链接时将库的内容直接加入到可执行程序中 2.动态链接: 一.编译过程简介 编译过程可以分为 ...

  6. java生成可执行文件的方法总结

    第一种:在jbuilder中:     首先你要保证Run菜单-->Run     Project能顺利运行     然后Wizards菜单-->Native     Executable ...

  7. python输出可执行文件_重定向-禁止在Python调用中输出可执行文件

    重定向-禁止在Python调用中输出可执行文件 我有一个名为B的二进制文件,该文件在调用时会生成输出. 如果从Bash shell调用它,则大多数输出将受到A > /dev/null的抑制.所有 ...

  8. 使用 ld 命令链接目标文件生成可执行文件

    1.目标文件生链接成可执行文件依赖的库和目标文件 使用 ld 链接目标文件生成可执行文件,用于取代命令 g++,仅仅用于学习 ld 命令的使用,不用于实际的项目编译. 首先看一个简单的 C++ 源文件 ...

  9. java的可执行文件_java生成可执行文件的方法总结

    第一种:在jbuilder中: 首先你要保证Run菜单-->Run     Project能顺利运行 然后Wizards菜单-->Native     Executable     Bui ...

最新文章

  1. 如何让vue项目打包出来之后更加小巧?
  2. proc maps分析coredump
  3. 从刷票了解如何获得客户端IP
  4. VS调用matlab
  5. java刘保_[SSH] Eclipse+Struts2的简单应用
  6. datatable 如何修改 某行 某列 的 字体颜色
  7. 数学归类你倾向于哪一方?
  8. @Builder 实际参数列表和形式参数列表长度不同
  9. 解决codeforces访问慢的问题
  10. 2021-07-09商场主页及分类
  11. mysql读写分离_SpringBoot+MyBatis+MySQL读写分离
  12. RTX查找本地明文密码
  13. 电信 dns服务器 不稳定,网速不稳定的解决方法:修改本地DNS
  14. 智能家居无创新,不智能
  15. 使用CM快速搭建CDH集群
  16. 【前端大屏可视化项目适配方案】
  17. Java写入txt文件内容
  18. 巴菲特致股东的一封信:2003年
  19. 手写文字图片识别怎么弄?这几款软件安利快收好
  20. docker容器内的attached 和detached模式

热门文章

  1. 实践是检验真理的唯一标准!静态路由相关配置实操③
  2. 全国计算机等级考试准考证编号规则
  3. 再见,南邮!别了,南京!
  4. Windows 最新版sourcetree免登录方法
  5. 关于dijkstra算法的个人总结
  6. 细细私语,看喜欢的书
  7. windows 组策略
  8. HTML5游戏开发经验及开发工具分享
  9. ACCESS备件管理数据库分类出入库改进
  10. 浅谈UML中常用的几种图——鲁棒图