Go源码文件与命令
Go源码文件
文件类型
命令源码文件 : 声明自己属于main包且包含main函数的源码文件,一个包里边不要有多个命令源码文件,虽然用go install ,go run单独执行命令源码文件没有问题,但go install ,go run包含命令源码文件的文件夹时会出错。
库源码文件: 不具备命令源码文件两个特征的源码文件,也就是存在与某个包的普通源码文件。库源码文件安装后,相应的归档文件(*.a)被存放在当前工作区的pkg目录下。
测试源码文件:名称以_test.go为后缀的源码文件,且必须包含Test或Beanchmark为名称前缀的函数。
//功能测试
func Test****(t *testing.T){ } //性能测试
func Beanchmark(b *testing.B){ }
常用命令
命令 | 说明 |
---|---|
go build | |
go get | |
go install | |
go run | 只能执行命令源码文件。 |
go help | 查看常用命令 |
参数 | 说明 |
---|---|
-a | 用于强制重新编译所有涉及的Go代码包(包括GO标准库中的代码包),几十他们已经是最新的了。该标记可以让我们有机会通过改动底层代码包做一些实验 |
-n | 使命令打印执行过程中用到的所有命令,而不去真正执行他们。如果只是想查看或验证命令的执行过程,又不想改变任何东西,使用这个参数最合适。 |
-race | 用于检测并报告指定Go程序中的数据竞争问题。 |
-v | 用于打印命令执行过程中涉及的代码包。这一定包括我们指定的目标代码包,有时还包括该代码包直接或间接依赖的那些代码包。这会让我们看到那些代码包被执行过。 |
-work | 用于打印命令执行时生成和使用的临时工作目录名字,且命令执行完后不删除它。如果不添加此标记,临时工作目录会在命令执行完后被删除。 |
-x | 打印命令执行过程中用到的所有命令,并同时执行他们。 |
go run
- 在临时工作目录下生成了归档文件和可执行文件
- 如果使用go run -work保留了临时工作目录,再次执行go run时,如果命令源码文件没有变化,就不会再执行compile.exe
go build
主要用于测试编译。编译过程中,如果有必要会同时编译与之关联的包
- 在临时文件夹生成生成归档文件*.a(库源码文件)或在当前目录下生成可执行文件(命令源码文件)
- 库源码文件只编译,命令源码文件先编译再link,然后生成可执行文件
- 如果是普通包,执行go build不会产生任何文件,可以用来检测库源码文件是否有效
- 如果是mian包,会在mian包下生成可执行文件。使用go build -o 路径,可在指定目录下生成可执行文件。
- go build会编译目录下所有的go文件,go build go文件可以只编译某个文件。
- 通过go build -o 可执行文件名 方式生成指定名字的可执行文件。默认情况下是package名(非main包)或者文件夹名(main包)
- go build 会忽略以_或.开头的go文件
go install
用来编译并安装源码文件的
命令分成两步执行:第一步生成可执行文件或归档文件(.a包),第二部把编译后的文件移动到GOPATH/bin(可执行文件)或GOPATH/pkg下(.a)
1.步骤:compile(归档文件) -> link (可执行文件) -> 将可执行文件移动到bin,归档文件移动到pkg;compile,link在临时文件夹下执行
go get
用于从远程仓库下载并安装代码包。注意,go get会代码包下载到GOPATH中的第一个工作区的src目录中,并安装
有用的标记-u标记,加上它可以利用网络来更新已有的代码包及其依赖包,如果已经下载过代码包,但这个代码包又有更新了,那么可以用-u标记更新本地的对应代码包。如果不加-u标记,执行go get 一个已有的代码包,会发现命令什么也不执行,只有加了-u标记,命令才会去执行git pull命令拉取最新的代码包版本,下载并安装。
go get还有一个称道的功能--智能下载。在使用它检出或更新代码包后,它会寻找与本地已安装Go语言的版本号相对应的标签(tag)或分支(branch)。比如,本机安装Go语言版本是1.x,那么go get命令会在该代码包的远程仓库中寻找名为"go1"的标签或分支,如果找到指定的标签或分支,则将本地代码包版本切换到此标签或分支,如果没有找到指定标签或分支,则将本地代码包版本切换到主干的最新版本。
go get -x github上源码包的浏览器地址(注意没有协议) -x 显示命令的执行过程
参数 | 说明 |
---|---|
-d | 让命令只执行下载动作,不执行安装动作 |
-f | 仅在使用-u有效时。会让命令忽略掉对已下载代码包的导入路径的检查。如果下载并安装的代码包所属的项目是你从别人哪里fork过来的,这样做就尤为重要了。 |
-fix | 让命令在下载代码包后先执行修正动作,而后再进行编译与安装 |
insecure | 允许命令程序使用非安全的schme(如http)去下载指定的代码包,如果你用的代码仓库没有https支持,可以添加此标记。 |
-t | 让命令程序同时下载并安装指定的代码包中的测试源码文件中依赖的代码包 |
-u | 让命令利用网络来更新已有代码包及其依赖包。默认情况下,不加-u时只会从网络上下载本地不存在的依赖包,而不会更新已经存在的代码包。 |
go doc
godoc -http=:9500 在本地生成go文档服务器 通过http://localhost:9500访问
Go源码文件与命令的更多相关文章
- golang---命令源码文件与命令行参数
命令源码文件是程序的运行入口,是每个可独立运行的程序必须拥有的. import "flag" flag包实现了命令行参数的解析.每个参数认为一条记录,根据实际进行定义,到一个se ...
- golang学习笔记---命令源码文件接收参数(flag包)
命令源码文件怎样接收参数 go标准库中有一个代码包专门用于接收和解析命令参数.这个包叫flag 实例1: package main import ( "flag" "fm ...
- 命令源码文件——Golang
源码文件又分为三种,即:命令源码文件.库源码文件和测试源码文件,它们都有着不同的用途和编写规则. 命令源码文件:1.独立程序的入口2.属于main包,包含无参数和无结果的main函数3.main函数执 ...
- go语言的源码文件的分类及含义
Go源码文件:名称以.go为后缀,内容以Go语言代码组织的文件 多个Go源码文件是需要用代码包组织起来的 源码文件分为三类:命令源码文件.库源码文件(go语言程序) 测试源码文件(辅助源码文件) 命令 ...
- 《UNIX网络编程(第3版)》unp.h等源码文件的编译安装
操作系统:Mac OS X 10.11.5 1.下载书中的源代码:点击下载 2.切换到解压后的目录 unpv13e,先查看下 README,依次执行: ./configure cd lib make ...
- [C/C++] 各种C/C++编译器对UTF-8源码文件的兼容性测试(VC、GCC、BCB)
在不同平台上开发C/C++程序时,为了避免源码文件乱码,得采用UTF-8编码来存储源码文件.但是很多编译器对UTF-8源码文件兼容性不佳,于是我做了一些测试,分析了最佳保存方案. 一.测试程序 为了测 ...
- Erlang千万级用户游戏框架(Openpoker)源码文件分析清单
openpoker源码 erlang写的网游服务器源码,OpenPoker是一个大型多人扑克网游,内建支持了容错能力,负载平衡和无限制的规模大小.本文是openpoker源码文件功能的一个清单式说明: ...
- C++ 多源码文件简单组织
C++ 多源码文件简单组织 基本上和C的是一样的,只不过C++的方法要在类中声明.看一个简单实例.ainimal.h 类里面对外公开的信息. 点击(此处)折叠或打开 #ifndef _ANIMAL_ ...
- Python源码文件中带有中文时,输出乱码
Python源码文件中带有中文时,文件头应加注释: #!/usr/bin/env python # -*- coding: utf-8 -*- 第一行注释是为了告诉Linux/OS X系统,这是一个P ...
随机推荐
- linux - top与ps间的区别
背景 在linux系统中提供了2个查询系统负荷值的命令,一个是 ps -o THREAD 一个是 top ,这两个命令都能够查询当前进程的CPU使用率情况,但是所代表的含义确实不一样的,ps -o T ...
- opencv —— HoughLines、HoughLinesP 霍夫线变换原理(标准霍夫线变换、多尺度霍夫线变换、累积概率霍夫线变换)及直线检测
霍夫线变换的原理 一条直线在图像二维空间可由两个变量表示,有以下两种情况: ① 在笛卡尔坐标系中:可由参数斜率和截距(k,b)表示. ② 在极坐标系中:可由参数极经和极角(r,θ)表示. 对于霍夫线变 ...
- 程序员为什么害怕低代码?ZT
转自:https://www.jianshu.com/p/cd89fe94cd30 低代码 是一种近些年兴起的企业软件快速开发技术和工具.借助低代码使用者无需编码即可完成企业应用的常用功能,少量编码扩 ...
- 纪中21日T3 2118. 【2016-12-30普及组模拟】最大公约数
纪中21日T3 2118. 最大公约数 (File IO): input:gcd.in output:gcd.out 时间限制: 1000 ms 空间限制: 262144 KB 具体限制 Goto ...
- IntelliJ IDEA 2018.3.2 永久破解
PS:动手能力强的来,手残的去淘宝买吧,大概15块钱1年.建议看完后在动手,有一个全局观,浪费不了多少时间 一. 下载破解补丁文件 链接:https://pan.baidu.com/s/1wFp14t ...
- Tutorial: Publishing additional services for printing
Complexity:IntermediateData Requirement:Use your own data There may be occasions when you need to pu ...
- Java 【循环语句】
一.java循环语句分支 二.for循环 在java中for循环和C的循环用法一样 public class demo{ public static void main(String[] args){ ...
- vue 富文本编辑器 项目实战用法
1.挑个富文本编辑器 首先针对自己项目的类型,确定自己要用啥编辑器. 1.1 wangeditor 如果一般类似博客这种项目不需要花里胡哨的,功能也不要求贼多的,推荐一下wangeditor(点击跳转 ...
- Yarn报错:Exception message: /bin/bash: line 0: fg: no job control
Exception message: /bin/bash: line 0: fg: no job control 这个错误是 本地idea跨平台远程调试hadoop集群出现的,在使用windows调用 ...
- 0013 基于DRF框架开发(01 基类视图 APIView)
之前学习了模型序列化和普通序列化,我们用最简单的视图和url实现了对序列化的操作. 而实际上,象之前那种由DRF自动生成所有的视图和url的情况,在应用是使用很少.而需要用户根据实际业务需求,自定义视 ...