首页 > 其他分享 >[Golang] GO 语言工作环境的基本概念

[Golang] GO 语言工作环境的基本概念

时间:2022-09-19 00:34:20浏览次数:89  
标签:文件 源代码 module Golang go 依赖 GO main 基本概念

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 文件夹下。

标签:文件,源代码,module,Golang,go,依赖,GO,main,基本概念
From: https://www.cnblogs.com/WAoyu/p/16706372.html

相关文章

  • Maven基本概念及使用
    Maven:项目构建工具Gradle:安卓领域据说未来会取代mavenAnt:淘汰 整个项目架构,source,resource,test,testresource依赖:导入的jar包可以对项目进行打包 属于apach......
  • SSM框架之Mybatis基本概念及使用方法
    SSMSpingMVC+Spring+Mybatis SpringMVC充当Servlet可以理解为SpringMVC是Spring的WEB支持Mybatis充当Dao层Sping充当一个润滑油的角色 MybatisPlus国内......
  • django中的auth模块与admin后台管理
    1.auth模块在创建完django项目之后,执行数据库迁移之后,数据库里会增加很多新表,其中有一张名为auth_user的表,当访问django自带的路由admin的时候,需要输入用户名和密码,其参......
  • 我的Go并发之旅、02 基本并发原语
    注:本文所有函数名为中文名,并不符合代码规范,仅供读者理解参考。GoroutineGo程不是OS线程,也不是绿色线程(语言运行时管理的线程),而是更高级别的抽象,一种特殊的协程。是一种非......
  • buf connect-go 路由
    bufconnect-go的路由,只是利用了golanghttphandler的特性参考使用packagemain import("context""log""net/http" "g......
  • Go 哈希
    一 哈希表的基本介绍散列表(Hashtable,也叫哈希表),是根据关键码值(Keyvalue)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查......
  • goo-cqhttp帮助文档
    目录帮助文档一、简介二、创建帮助文档三、最后帮助文档一、简介在经历这个专栏的学习之后,我想go-cqhttp+flask的学习也该告一段落了,因为有部分功能,如定时发送功能,......
  • GO 栈
    栈的介绍有些程序员也把栈称为堆栈,即栈和堆栈是同一个概念栈的英文为(stack)栈是一个先入后出(FILO-FirstInLastOut)的有序列表。栈(stack)是限制线性表中元素的插入和......
  • buf connect-go 试用
    golang包含一个grpc-web可以让浏览器运行grpc,但是是需要一些中间件工具的,connect-go简化了处理,可以基于post通过http协议就可以试用grpc了包含的特性基于http......
  • Go 双向链表
    1.双向链表的应用实例使用带head头的双向链表实现——王者容易英雄排行榜单向链表的缺点分析:1)单向链表,查找的方向只能是一个方向,而双向链表可以向前或者向后查找2)单向......