Go源码文件分三个种类:

1)命令源码文件:如果一个源码文件被声明属于main代码包,且该文件代码中包含无参数声明和结果声明的main函数,则它就是命令源码文件。命令源码文件可以通过go run命令直接启动运行。同一个代码包中的所有源码文件,其所属代码包的名称必须一致。如果命令源码文件和库源码文件处于同一个代码包中,那么在该包中就无法正确执行go build和go install命令。换句话说,这些源码文件将无法通过常规方法编译和安装。因此,命令源码文件通常会单独放在一个代码包中。作为程序模块的入口。另外也不建议同一个代码包中有多个命令源码文件。同样会出现go build和go install命令无法编译和安装该代码包。当代码包中有且仅有一个命令源码文件时,在文件所在目录中执行go build 命令,在该目录下生成一个与目录同名的可执行文件;若使用go install命令,则可在当前工作区的bin目录下生成相应的可执行文件。

需要注意的是,只有当前环境变量GOPATH中包含一个工作区的目录路径时,go install命令才会把命令源码文件安装到当前工作区的bin目录下。

否则必须设置环境变量GOBIN,该环境变量的值是一个目录的路径,用于存放所有因Go命令源码文件而生成的可执行文件。

2)库源码文件:声明的包名与他直接所属的代码包(目录)名一致,且库源码文件中无包含无参数声明和无结果声明的main函数,不能被直接运行的源码文件,它仅用于存放程序实体,这些程序实体可以被其他代码使用。

代码包声明的基本规则:
  1. 同目录下的源码文件的代码包声明语句要一致。也就是说,它们要同属于一个代码包(package)。这对于所有源码文件都是适用的。
如果目录中有命令源码文件,那么其他种类的源码文件也应该声明属于main包。这也是能够成功构建运行它们的前提。
  2. 源码文件声明的代码包的名称可以与其所在的目录的名称不同。在针对代码包进行构建时,生成的结果文件的主名称与其父目录的名称一致。
对于命令源码文件,构建生成可执行文件的主名称会与其父目录的名称相同。

3)测试源码文件

golang 源码文件的更多相关文章

  1. [Golang学习笔记] 03 库源码文件

    库源码文件:不能被直接运行的源码文件,它仅用于存放程序实体,这些程序实体可以被其他代码使用. 代码包声明的基本规则: 1. 同目录下的源码文件的代码包声明语句要一致.也就是说,它们要同属于一个代码包( ...

  2. golang学习笔记----源码文件

    GO源码文件

  3. Golang源码探索(一) 编译和调试源码(转)

    GO可以说是近几年最热门的新兴语言之一了, 一般人看到分布式和大数据就会想到GO,这个系列的文章会通过研究golang的源代码来分析内部的实现原理,和CoreCLR不同的是, golang的源代码已经 ...

  4. 修改并编译golang源码

    最近为了做Hyperledger Fabric国密改造,涉及到了golang源码的改动.特将操作过程整理如下,以供参考: golang的源码安装其实比较简单,只需运行源码包中的脚本src/all.ba ...

  5. Golang 源码剖析:log 标准库

    Golang 源码剖析:log 标准库 原文地址:Golang 源码剖析:log 标准库 日志 输出 2018/09/28 20:03:08 EDDYCJY Blog... 构成 [日期]<空格 ...

  6. vs2017 asp.net 网站发布问题 (发布路径下含源码文件)

    使用vs2010版本,网站发布后会自动将源码发不为.dll程序集,但vs2017需要进行设置,其他版本没有试过. vs2017网站发布: 1. 2. 这里给一个你想用的名字,之后它会出现在你的程序文件 ...

  7. Golang源码探索(二) 协程的实现原理(转)

    Golang最大的特色可以说是协程(goroutine)了, 协程让本来很复杂的异步编程变得简单, 让程序员不再需要面对回调地狱,虽然现在引入了协程的语言越来越多, 但go中的协程仍然是实现的是最彻底 ...

  8. Golang源码探索(三) GC的实现原理(转)

    Golang从1.5开始引入了三色GC, 经过多次改进, 当前的1.9版本的GC停顿时间已经可以做到极短.停顿时间的减少意味着"最大响应时间"的缩短, 这也让go更适合编写网络服务 ...

  9. 如果是多个 c 代码的源码文件,编译方法如下: $ gcc test1.c test2.c -o main.out $ ./main.out test1.c 与 test2.c 是两个源代码文件。

    如果是多个 c 代码的源码文件,编译方法如下: $ gcc test1.c test2.c -o main.out $ ./main.out test1.c 与 test2.c 是两个源代码文件.

随机推荐

  1. open_basedir restriction in effect

    vim /usr/local/nginx/conf/fastcgi.conf fastcgi_param PHP_ADMIN_VALUE "open_basedir=$document_ro ...

  2. Django框架(九)-- 多表操作:一对一、一对多、多对多的增删改,基于对象/双下划线的跨表查询、聚合查询、分组查询、F查询与Q查询

    一.创建多表模型 一对一:OneToOneField 一对多:ForeignKey 多对多:ManyToManyField 创建表时,会自动添加一个nid字段,并且自增,所以id可以不用手动创建 On ...

  3. spring项目使用mave将第三方jar包打进war包中

    背景:一个标准的ssm项目,需要使用到第三方jar,现需要将项目发布到liunx的服务器上,将项目打成war包,第三方war包也需要打进去 首先是直接打包,发现第三方jar包并没有打进去......蛋 ...

  4. 使用acme.sh申请&自动续期LetsEncrypt免费SSL证书(转)

    一.简介 LetsEncrypt是一个免费.自动.开放的证书颁发机构.acme.sh 实现了 acme 协议, 可以从 LetsEncrypt 生成免费的证书. 本文介绍如何使用acme.sh来签发并 ...

  5. S3C2440_LCD控制器

    1.LCD控制器主要有两方面的功能: 1)从framebuffer中取出某个像素的数据: 2)配合其他信号,一起将这个数据发送给LCD 不管是2440,还是其他型号的ARM芯片.它们的LCD控制器的功 ...

  6. 使用msRequestFullscreen全屏在IE 11无效

    问题产生原因:项目需要实现百度地图全屏的功能, 通过github上http://robnyman.github.io/fullscreen/这个demo初步实现在这个功能,在谷歌上也完美运行,而在ie ...

  7. Browser cannot find PAC because wpad hostname cannot be resolved

    Enterprise Network administrator may faultly forget to configure wpad hostname to DNS server. If use ...

  8. 2090. 「ZJOI2016」旅行者 分治,最短路

    2090. 「ZJOI2016」旅行者 链接 loj 思路 \((l,mid)(mid+1,r)\).考虑跨过mid的贡献. 假设选的中间那条线的点为gzy,贡献为\(dis(x,gzy)+dis(g ...

  9. 洛谷 P5535 【XR-3】小道消息

    https://www.luogu.com.cn/problem/P5535 伯特兰-切比雪夫定理: 若整数n > 3,则至少存在一个质数p,符合n < p < 2n − 2. 另一 ...

  10. Python中字符串匹配函数startswith()函数

    1.函数用途含义 Python startswith() 方法用于检查字符串是否是以指定子字符串开头,如果是则返回 True,否则返回 False.如果参数 beg 和 end 指定值,则在指定范围内 ...