GoLang项目开发基础

2023-11-09

一、GOROOT

GOROOT指的Golang语言的安装路径,即Golang语言内置程序库所在的位置。通常在安装时环境变量会设置好GOROOT路径。当开发时,import标准库时并不需要额外安装,当程序运行后,也会去GOROOT路径下寻找相应程序。

# Mac配置GOROOT
# 编辑.bash_profile文件,增加如下语句:export GOROOT=/usr/local/go
> vim ~/.bash_profile 

二、GOPATH

GOPATH即存放第三方库的位置。通常开发时,会把GOPATH重新设置。

# 设置当前目录为GOPATH:选择一个目录,在目录的命令行下执行
> export GOPATH='pwd'

2.1 GOPATH目录

bin:放置编译后生成的可执行文件。
pkg:放置编译后生成的包/库的归档文件;
src:放置项目和库的源文件;

        src:用于以包(package)的形式组织并存放 Go 源文件,这里的包与 src 下的每个子目录是一一对应。例如,若一个源文件被声明属于 log 包,那么它就应当保存在 src/log 目录中。(另外注意:Go语言会把通过go get命令获取到的库源文件下载到 src 目录下对应的文件夹当中。)

        pkg:用于存放通过go install命令安装某个包后的归档文件。归档文件是指那些名称以“.a”结尾的文件。该目录与 GOROOT 目录(也就是Go语言的安装目录)下的 pkg 目录功能类似,区别在于这里的 pkg 目录专门用来存放项目代码的归档文件。编译和安装项目代码的过程一般会以代码包为单位进行,比如 log 包被编译安装后,将生成一个名为 log.a 的归档文件,并存放在当前项目的 pkg 目录下。

        bin:与 pkg 目录类似,在通过go install命令完成安装后,保存由 Go 命令源文件生成的可执行文件。在类 Unix 操作系统下,这个可执行文件的名称与命令源文件的文件名相同。而在 Windows 操作系统下,这个可执行文件的名称则是命令源文件的文件名加 .exe 后缀。

三、Go Modules

        Golang从1.13版本开始有Go Modules。Go Modules可以将某个项目(文件夹)下的所有依赖整理成一个 go.mod 文件,里面写入了依赖的版本等;使用Go Modules之后我们可不用将代码放置在src下了。

# 如何开启Go Modules
方式一:> go env -w GO111MODULE=on
方式二:> export GO111MODULE=on

# GO111MODULE可以设置3个值
# on:开启
# off:关闭
# auto:根据当前目录下是否有go.mod文件来判断是否使用modules功能

# 补充:module功能默认不在GOPATH目录下查找依赖文件,所以使用modules功能时请设置好代理

        使用 Go Modules 管理依赖后会在项目根目录下生成两个文件 go.modgo.sum

  go.mod:会记录当前项目的所有依赖项;

  go.sum:会记录每个依赖库的版本和哈希值;

3.1 Go Modules 初始化

# 初始化路径 
> go mod init demo
# 初始化go.mod
go mod init  
# 检测依赖(更新依赖)
> go mod tidy 
# 如果有些依赖项未下载则需要下载(下载依赖文件)
> go mod download 
# 导入依赖(将依赖转移至本地的vendor文件)
> go mod vendor

// 以下不常用
# 手动修改依赖文件
> go mod edit  
# 打印依赖图
> go mod graph  
# 校验依赖
> go mod verify  
# 解释为什么需要依赖
> go mod why 

注意事项:

1)在git中需要把vendor文件夹放入白名单中,不然项目体积会很大。

2)git设置白名单方式为在git托管的项目根目录新建 .gitignore 文件,设置忽略即可,但是 go.mod 和 go.sum 不要忽略。

3)另一人clone项目后在本地进行依赖更新(同上方依赖更新)即可。

四、Go PROXY

        GOPROXY 是Go语言官方提供的一种通过中间代理商来为用户提供包下载服务的方式。要使用 GOPROXY 只需要设置环境变量 GOPROXY 即可。

// 阿里云镜像
go env -w GOPROXY=https://mirrors.aliyun.com/goproxy/
// 中国golang镜像
go env -w GOPROXY=https://goproxy.io
// 七牛云代理goproxy.cn
go env -w GOPROXY=https://goproxy.cn,direct

五、Go Get 

执行go get命令,在下载依赖包的同时还可以指定依赖包的版本;

运行go get -u命令会将项目中的包升级到最新的次要版本或者修订版本;

运行go get -u=patch命令会将项目中的包升级到最新的修订版本;

运行go get [包名]@[版本号]命令会下载对应包的指定版本或者将对应包升级到指定的版本。

提示:go get [包名]@[版本号]命令中版本号可以是 x.y.z 的形式,例如 go get foo@v1.2.3,也可以是 git 上的分支或 tag,例如 go get foo@master,还可以是 git 提交时的哈希值,例如 go get foo@e3702bed2。

————————————————
版权声明:本文为CSDN博主「consice code」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/hzb869168467/article/details/111096340

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

GoLang项目开发基础 的相关文章

随机推荐

  • dnf连接服务器黑屏xp系统,xp系统开机黑屏的解决办法

    xp系统开机黑屏的解决办法 有些用户在使用XP系统时 有时候操作失误导致XP系统开机时黑屏 有开机声音 但是屏幕无显示 这是什么原因呢 其实这是因为你使用电脑是不小心更改了分辨率 一般更改了分辨率 如果分辨率超限 win7系统会自动恢复最低
  • python 关闭redis连接

    python读写redis时 到底需不需要关闭redis连接池连接 import redis def RedisUtils pool redis ConnectionPool host 172 8 10 145 port 6379 pass
  • Android Camera HAL3中预览preview模式下的控制流

    本文均属自己阅读源码的点滴总结 转账请注明出处谢谢 欢迎和大家交流 qq 1037701636 email gzzaigcn2009 163 com Software 系统源码Android5 1 Camera3研读前沿 当初在研读Came
  • 焦距物距像距图解 示意图_自制小孔成像装置 鞋盒DIY简单小孔成像制作图解

    两千多年前 我国的学者墨子和他的学生 做了世界上第一个小孔成像的实验 他的做法是 在一间黑暗的屋子里 一面墙上开一个小孔 小孔对面的墙上就会出现外面景物的倒像 我们要重复这个实验 当然不需要专门造一间没有窗户的屋子 甚至不需要任何专门的器材
  • 13种架构设计模式(常用)

    13种常用架构设计模式 适配器模式 策略模式 观察者模式 原型 外观模式 装饰模式 工厂模式 抽象工厂模式 桥接模式 代理模式 单例模式 备忘录模式 生成器模式 命令模式 组合模式
  • UE4透明粒子距离场碰撞随机分布解决方案

    由于景深碰撞不能应用于透明物体 因此试了一下UE4的距离场碰撞 效果还可以接受 但是发现发射器的Collision中Random Spread和Random Distribution参数都失效了 粒子只能按照法线做反弹 检查源码发现Coll
  • 【2022年高教杯数学建模】C题:古代玻璃制品的成分分析与鉴别方案及代码实现(二)

    问题二 根据附件数据分析高钾玻璃 铅钡玻璃的分类规律 对于每个类别选择合适的化学成分对其进行亚类分析 给出具体的划分方法以及划分结果 并对分类结果的合理性和敏感性进行分析 1 问题2的分析 题目要求我们探究高钾玻璃和铅钡玻璃的分类规律 并对
  • DOM元素三大系列

    offset元素偏移量 获取元素距离带有定位父元素的位置 获取元素自身的大小 宽度高度 返回的数组不带单位 offset常用属性 element offsetParent 返回作为该元素带有定位的父级元素 如果父级没有定位则返回body e
  • The Standard Template Library___CH_21

    21 1 The Standard Library The Standard Library The Standard library contains a collection of classes that provide templa
  • c#获取MySql表中数据

    using MySql Data MySqlClient 引入MySql Data dll public static Dictionary
  • 从原理聊JVM(一):染色标记和垃圾回收算法

    1 JVM运行时内存划分 1 1 运行时数据区域 方法区 属于共享内存区域 存储已被虚拟机加载的类信息 常量 静态变量 即时编译器编译后的代码等数据 运行时常量池 属于方法区的一部分 用于存放编译期生成的各种字面量和符号引用 JDK1 8之
  • 常见聚类算法及使用--均衡的迭代并减少聚类中心的层次聚类(BIRCH)

    前言 前面文章给大家介绍了 关于层次聚类算法的实现 那么本文给大家继续介绍层次聚类的优化算法 BIRCH 大家都知道像 K means 这样的聚类算法比较有局限性 而且在大数据场景下很难处理 特别是在有限的内存和较慢的CPU硬件条件下 我相
  • 安装/使用 pycurl 遇到的问题

    记录下安装 pycurl 出现的问题 问题3 ImportError pycurl libcurl link time ssl backend openssl is different from compile time ssl back
  • C语言指针总结

    文章目录 0 前言 1 指针的定义 2 指针的运算 3 指针与数组 3 1 数组指针 指向数组的指针 3 2 指针数组 4 指针与字符 5 指针与结构体 6 指针与const 常量指针与指针常量 6 1 指针常量 Constant Poin
  • 前端每日十题,题目答案来自(每日三加一网站)。

    2022 1 18 今日题目来源http www h camel com index html 每日三加一 答案选择评论区好的 同时写出自己的答案 转载加学习 加油 1 html 页面导入样式时 使用link和 import有事么区别 区别
  • 【牛客网刷题】VL8-VL10 generate for语句、比较数大小、function的使用

    写在前面 本系列博客记录牛客网刷题记录 日拱一卒 功不唐捐 目录 VL8 使用generate for语句简化代码 题目描述 输入描述 输出描述 RTL 设计 testbench 设计 仿真测试 VL9 使用子模块实现三输入数的大小比较 题
  • 软件测试度量的关键指标,软件测试度量指标简介

    1 测试度量的目的 测试度量活动首要考虑的是目的 测试中的度量一般有如下目的 判断测试的有效性 判断测试的完整性 判断工作产品的质量 分析和改进测试过程 2 度量内容 度量的数据构成一个层次化的体系 就是度量框架 框架的上层是度量指标 Fa
  • code embedding研究系列一-基于token的embedding

    Code Embedding系列 token embedding 1 Automated software vulnerability detection with machine learning 数据集来源 数据集预处理 分类方法 获取
  • Keepalived与HaProxy的协调合作原理分析

    Keepalived与HaProxy的协调合作原理分析 keepalived与haproxy合作场景 更好的理解方式 协调合作中考虑的问题 一 Keepalived 以TCP IP模型角度来分析 二 HaProxy 总结 协调合作中考虑的问
  • GoLang项目开发基础

    一 GOROOT GOROOT指的Golang语言的安装路径 即Golang语言内置程序库所在的位置 通常在安装时环境变量会设置好GOROOT路径 当开发时 import标准库时并不需要额外安装 当程序运行后 也会去GOROOT路径下寻找相