1. GOPATH 和 GOROOT(环境变量)

1. GOROOT

go 编译器、标准库等安装的地方,所有我们写的代码其实都是文本文件而已,需要编译器等工具将其加工成可执行文件或者库文件才能使用,每种语言都有自己的这样一套“工具”。GOROOT 就是 go 语言的这类“工具”的安装目录。

2. GOPATH

类似工作区(workspace)的概念,其中里面有三个文件夹

  • src:保存自己的源代码,或者第三方依赖的代码,有了 go module 现在一般不用这个了;
  • pkg:一般保存一些库文件,在 go module 模式中,也存储下载下来的依赖 module;
  • bin:它保存已编译的可执行文件;

有一些老的 go 教程,需要源代码放在 src 目录下,现在这种模式已经不推荐了,因为现在推荐的是 go module 模式,自己写的 module 放在哪里都可以。 之所以老的那种模式被废弃,主要原因是无法很好的做依赖管理。

3. Package

GO 语言使用 package 来组织源代码的,就像其他的语言一样,在程序内部需要将功能进行划分,任何一个 go 语言程序必须属于一个package,每个 go 文件的开头要写上 package xxx。

package 一般要满足如下三个条件:

  • 同一个目录下的同级的所有 .go 文件应该属于一个包;
  • 包名建议和目录名同名;
  • 一个 go 程序有且只有一个 main 函数作为程序入口,且必须属于 main 包,没有或者有多个 main 包,编译程序会出错。

2. Go Module

1. GO111MODULE

Go Module 在 go 1.14 正式发布,不用再把源代码放在 src 文件夹下,比之前更好的依赖管理,也是现在推荐的做法。启用 Go Modules 需要显示设置一个环境变量 GO111MODULE=on。

利用 go mod init 命令在当前目录初始化一个 module,如下。

go mod init example.com/test

2. Module Path

其中 example.com/test 叫做 moudle path ,一般采用“代码仓库 + module name” 的方式定义。例如 github.com/go-sql-driver/mysq go 会去 github 仓库去获取这个 module。

3. go.mod 和 go.sum

在 module 主目录下主要会有两个文件和 module 相关:

  • go.mod:它用来标记一个 module 和它的依赖库以及依赖库的版本。
  • go.sum:记录了所有依赖的 module 的校验信息,为了防止下载的 module 被恶意篡改,主要用于安全校验。

3. Go 的几个命令

1. go run

可以快速的运行某个 go 文件,go 在背后会在临时的目录编译并且执行,在程序退出后清除临时目录。

2. go build

编译 main 包,并在当前或者指定的目录生成可执行文件,非 main 包一般不会生成任何文件。

3. go install

编译 go 文件,将生成的可执行文件或者库文件放到 GOPATH 下的 bin 或者 pkg 文件夹下。

最新文章

  1. 鸟哥私房菜学习(一)——Linux背景了解
  2. javascript高级教程:如何优化javascript代码性能
  3. weiphp---------图灵机器人存在的bug。
  4. exit()和_exit()函数
  5. WCF 遇到 由于线程退出或应用程序请求,已放弃 I/O 操作 ListenerContextInputStream
  6. uva 10205 模拟
  7. 操作系统-mac安装linux(Ubuntu)
  8. hadoop 学习笔记 (十) mapreduce2.0
  9. reaver 使用方法和技巧
  10. 第01讲- Android背景知识
  11. WPF中override ResourceDictionary中的设置的方法
  12. 读《Java并发编程的艺术》(二)
  13. 使用puppet
  14. 戴尔R720xd服务器系统安装
  15. scrapy中的response
  16. gitlab的搭建及问题的解决
  17. SSM-Spring-05:Spring的bean是单例还是多例,怎么改变?
  18. JavaScript(四)
  19. python:爬虫获取淘宝/天猫的商品信息
  20. css3渐变特性

热门文章

  1. 本地拉取服务器上的项目,SVN 由于目标计算机积极拒绝 无法连接失败
  2. NIO.2中Path、 Paths、Files类的使用
  3. 什么是好的 API 设计?【eolink翻译】
  4. harbor之HTTPS安装
  5. if语句实现考试成绩划分和用if语句替换三元运算符
  6. 使用python3.7和opencv4.1来实现人脸识别和人脸特征比对以及模型训练
  7. SQL注入 基础学习
  8. Ubuntu添加非root用户到Docker用户组
  9. Word 的页眉、页脚、页码分别是什么?怎么设置?
  10. Mac设置外网访问本地项目