编译和工具链

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 编译 && 工具的更多相关文章

  1. koala预编译工具的使用

    Koala是一个开源的预处理语言图形编译工具,目前已支持Less.Sass.Compass与CoffeeScript. 安装Koala 在Koala官网根据你的系统平台下载对应的版本.Linux系统要 ...

  2. apk反编译工具

    反编译工具: apktool:资源文件获取,可以提取出图片文件和布局文件进行使用查看 dex2jar:将apk反编译成Java源码(classes.dex转化成jar文件) jd-gui:查看APK中 ...

  3. less及编译工具介绍

    什么是LESSCSS LESSCSS是一种动态样式语言,属于CSS预处理语言的一种,它使用类似CSS的语法,为CSS的赋予了动态语言的特性,如变量.继承.运算.函数等,更方便CSS的编写和维护. LE ...

  4. eclipse安装反编译工具

    身为一名程序员来说,日常最常做的就是编写代码和查看别人写好的源代码了,有时候打开别人写的class文件发现根本不是自己想要的,所以给大家介绍一种eclipse中反编译class文件的工具. 第一步:下 ...

  5. Koala – 开源的前端预处理器语言图形编译工具

    koala 是一个前端预处理器语言图形编译工具,支持 Less.Sass.Compass.CoffeeScript,帮助 Web 开发者更高效地使用它们进行开发.跨平台运行,完美兼容 Windows. ...

  6. .net混淆、反编译工具调查

    常用的工具列表[比较常见的] 混淆器.加密 Dotfuscator VS默认带的工具,不过是个社区版 强度不大 dotNET Reactor 使用了NativeCode 和混淆的形式 Xenocode ...

  7. Android反编译工具的使用-Android Killer

    今天百度搜索“Android反编译”搜索出来的结果大多数都是比较传统的教程.刚接触反编译的时候,我也是从这些教程慢慢学起的.在后来的学习过程中,我接触到比较方便操作的Android反编译.在这,我将使 ...

  8. iOS系统提供开发环境下命令行编译工具:xcodebuild

    iOS系统提供开发环境下命令行编译工具:xcodebuild[3] xcodebuild 在介绍xcodebuild之前,需要先弄清楚一些在XCode环境下的一些概念[4]: Workspace:简单 ...

  9. Less/Sass编译工具,koala使用指南

    如果你正在使用sass.less或coffee,而没有注意到koala, 那说明你可能已经好久没有更新你的知识库了.koala这个由国人编写的,用于编译sass.less.coffee利器,在最近的短 ...

  10. Eclipse反编译工具Jad及插件JadClipse配置

    Jad是一个Java的一个反编译工具,是用命令行执行,和通常JDK自带的java,javac命令是一样的.不过因为是控制台运行,所以用起来不太方便.不过幸好有一个eclipse的插件JadClipse ...

随机推荐

  1. Linux expect的安装与使用

    Expect是在Tcl的基础上创建的,可以用来做一些Linux下无法做到交互的命令操作,可用于远程管理服务器. 一.安装Tcl: 1.下载源码包: wget http://nchc.dl.source ...

  2. idea的一些常用快捷键

    快捷键 1.进入实现方法的快捷键 Ctrl + Alt + B Ctrl + Alt + 鼠标点击 2.自动给方法添加注释的快捷键 输入/**,然后回车 3.删除一行 CTRL + Y / CTRL ...

  3. Windows 下使用OpenSSL生成RSA公钥和私钥

    Windows 下使用OpenSSL生成RSA公钥和私钥 (1)下载OpenSSL 可到该地址下载OpenSSL: https://www.openssl.org/source/(https://ww ...

  4. spring 使用@AspectJ注解开发Spring AOP

    选择切点 Spring是方法级别的AOP框架,而我们主要也是以某个类的某个方法作为切点,用动态代理的理论来说,就是要拦截哪个方法织入对应AOP通知. 代码清单:打印角色接口 package com.s ...

  5. 改进初学者的PID-采样时间

    最近看到了Brett Beauregard发表的有关PID的系列文章,感觉对于理解PID算法很有帮助,于是将系列文章翻译过来!在自我提高的过程中,也希望对同道中人有所帮助.作者Brett Beaure ...

  6. Intellij IDEA集成mybatis-generator插件自动生成数据库实体操作类

    Intellij IDEA集成mybatis-generator插件自动生成数据库实体操作类 转载至:https://blog.csdn.net/fishinhouse/article/details ...

  7. 安卓微信overflow-x overflow-y引发的bug

    今天xgo文章图片页上线用微信扫页面发现一个bug,页面可以双击放大缩小. 找了半天原因,发现是图片描述设置了overflow-y引发的bug. 建议在微信场景里满屏显示不能滚动的页面里慎用overf ...

  8. Spring 消息转换器和注解控制器

    目录 1.什么是消息转换器? 2.消息转换器结构:HttpMessageConverter 3.Spring 调用逻辑 3.1 HandlerMethodArgumentResolver 接口 和 H ...

  9. gluster设置日志级别

    glusterd --log-level WARNING #将日志级别设定为warning gluster --log-level=ERROR volume status #查看日志级别的状态 glu ...

  10. websockify文档

    一.官网地址 地址:https://github.com/novnc/websockify 二.开启代理 1.单台服务器 python /usr/local/websockify/websockify ...