一、系统环境变量

GOROOT

指定go的安装目录,win是在 C\Go\,Linux在 /usr/local/go下,如果不是默认的目录,则需要指定 GOROOT环境变量,否则不需要

GOPATH

工作目录,可以指定多个,环境变量中用 ; 分割 go get下载目录的时候默认会下载到第一个GOPATH的src目录下,找 包也是从第一个目录开始往后找。可以指定两个工作区,第一个用来专门存放下载库

  • src:源代码文件
  • pkg:编译的中间文件
  • bin:编译产生可执行文件

GOOS GOARCH用来设置 编译产生可执行文件的目标OS和CPU架构

go进行交叉编译:

linux

GOOS=linux GOARCH=amd64 go build hello.go
GOOS=windows GOARCH=amd64 go build hello.go

二、包

1、作用域

包内大写的:全部包可见

包内小写的:仅仅在本包内可见

{}块作用域:只在块内可见

	{
y:=999
}
log.Println(y) //报错 y不可见

2、包引用

包的全局绝对路径就是 $GOROOT/src$GOPATH/src

当然也可以引用相对路径

  • 可以给包起别名

  • import _ "fmt"  //引用而不使用
  • import . "fmt" //引用所有
    func main(){
    Println("ok") //这样就可以直接使用包里面的函数
    }

3、init()

包里面可以有 init() 函数,一般用来初始化一些包中要用到的全局变量


三、mod包管理

mod只是版本管理工具, 在go mod初始化的项目目录下执行go get xxx,会将package下载到$GOPATH/pkg/mod目录下安装,并且添加或更新到go.mod文件中

1、相关环境变量

GO111MODULE=off go命令从不使用新模块支持。使用GOPATH模式(查找vendor目录和GOPATH路径下的依赖)
GO111MODULE=on go命令开启模块支持,只根据go.mod下载和查找依赖
GO111MODULE=auto 默认值,go命令根据当前目录启用或禁用模块支持。仅当当前目录位于$GOPATH/src之外并且其本身包含go.mod文件或位于包含go.mod文件的目录下时,才启用模块支持。

2、go mod文件结构

module note-gin

go 1.13

require (
github.com/gin-gonic/gin v1.5.0
github.com/go-redis/redis v6.15.7+incompatible
github.com/go-sql-driver/mysql v1.4.1
github.com/howeyc/fsnotify v0.9.0 // indirect
github.com/jinzhu/gorm v1.9.12
github.com/mattn/go-colorable v0.1.6 // indirect
github.com/onsi/ginkgo v1.12.0 // indirect
github.com/onsi/gomega v1.9.0 // indirect
github.com/pilu/config v0.0.0-20131214182432-3eb99e6c0b9a // indirect
github.com/pilu/fresh v0.0.0-20190826141211-0fa698148017
github.com/pilu/miniassert v0.0.0-20140522125902-bee63581261a // indirect
github.com/qiniu/api.v7/v7 v7.4.1
github.com/robfig/cron v1.2.0
gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc // indirect
gopkg.in/gomail.v2 v2.0.0-20160411212932-81ebce5c23df
gopkg.in/yaml.v2 v2.2.4
)
  1. module语句指定包的名字(路径)

  2. require语句指定的依赖项模块

  3. replace语句可以替换依赖项模块

  4. exclude语句可以忽略依赖项模块

module my/thing
require other/thing v1.0.2 //需要的模块
require new/thing v2.3.4
exclude old/thing v1.2.3 //排除的模块的某些版本
replace bad/thing v1.4.5 => good/thing v1.4.5 //替换的模块

3、相关命令

init

go mod init TestGoMod

在当前目录下创建一个名为 TestGoMod的mod文件

module TestGoMod

go 1.13

list

go list -m all  查看所有依赖以及间接模块当前版本
go list -u -m all 查看所有依赖以及间接依赖当前版本和可升级版本
go list -m -versions github.com/gin-gonic/gin 查看某些模块的所有版本

get

go get -u ./... 更新所有模块
go get -u github.com/xxxx 更新指定模块最新版本 go get github.com/xxxxx 下载模块依赖 //加上@v1.x.x 可以获取指定版本
go get github.com/gin-gonic/gin@v1.3.0
go get github.com/gin-gonic/gin@v1.1.4

build

go build ./...  构建当前项目
go test ./... 构建测试模块

tidy

架构和构建标记的其他组合中修剪所有不需要的依赖项,并添加其他依赖项所需的任何依赖项

go mod tidy

[go]包和工程管理的更多相关文章

  1. emacs工程管理,cedet ede插件自动构建Make,Automake

    鉴于自己一直都是在做客户端开发方面的工作,服务端很多知识都随着时间淡忘了,最近有一个计划,用一些时间补一下基础.所以早上很早就起床,花了一点时间大致浏览了一下BSD socket的相关API,然后用G ...

  2. Go语言 函数,工程管理

    Go语言 函数,工程管理 1.无参无返回值函数的使用 package main import "fmt" func main() { // 无参无返回值函数的调用:函数名() fu ...

  3. go语言基础之工程管理和工作区介绍

    1.工程管理 在实际的开发工作中,直接调用编译器进行编译和链接的场景是少而又少,因为在工程中不会简单到只有一个源代码文件,且源文件之间会有相互的依赖关系.如果这样一个文件一个文件逐步编译,那不亚于一场 ...

  4. go语言入门(5)工程管理

    在工程中不会简单到只有一个源代码文件,且源文件之间会有相互的依赖关系,早期Go语言使用makefile作为工程管理的临时方案,后来的Go命令行工具的革命性之处在于彻底消除了工程文件的概念,完全用目录结 ...

  5. go语言20小时从入门到精通(六、工程管理)

    在实际的开发工作中,直接调用编译器进行编译和链接的场景是少而又少,因为在工程中不会简单到只有一个源代码文件,且源文件之间会有相互的依赖关系.如果这样一个文件一个文件逐步编译,那不亚于一场灾难. Go语 ...

  6. Golang编程的工程管理

    Golang编程的工程管理 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.

  7. 使用BLADE构建c++工程管理

    使用BLADE构建c++工程管理 字数764 阅读2753 评论2 喜欢4 一. c++工程依赖管理 之前在百度一直使用comake2构建c++项目,十分方便.免去了手写Makefile的痛苦,很多项 ...

  8. Makefile 工程管理

    Makefile 工程管理 Makefile 规则 --变量 在Makefile中,用户除了可以自己定义变量外,还可以使用存在系统已经定义好的默认变量 $^:代表所有的依赖文件 $@:代表目标 $&l ...

  9. make工程管理器

    1.概述 大型程序中,人们希望工具自动识别修改的文件,而且不需要输入冗长的命令,就可以进行编译链接等操作,于是make工程管理器应运而生. make可以自动识别文件时间戳,只处理修改的文件: make ...

随机推荐

  1. 基于STM32F030F4P9和STM32 CUBEMX 输出PWM波形

    STM32F030F4P9定时器功能比较丰富,在此记录项目中使用其自动输出PWM波形(频率:50HZ).CubeMX配置定时器如下图说明. 在此定时器基础时钟为48MHZ,配置中不做分频处理,预分频系 ...

  2. 大部分程序员还不知道的 Servelt3 异步请求,原来这么简单?

    前言 博文地址:https://sourl.cn/URptix 当一个 HTTP 请求到达 Tomcat,Tomcat 将会从线程池中取出线程,然后按照如下流程处理请求: 将请求信息解析为 HttpS ...

  3. 逃生 HDU 4857(反向建图 + 拓扑排序)

    逃生 链接 Problem Description 糟糕的事情发生啦,现在大家都忙着逃命.但是逃命的通道很窄,大家只能排成一行. 现在有n个人,从1标号到n.同时有一些奇怪的约束条件,每个都形如:a必 ...

  4. J. Justifying the Conjecture(规律——整数拆分)

    题目链接 五校友谊赛终于开始了,话不多说A题吧. 从前从前有一个正整数n,你需要找到一个素数x和一个合数y使x+y=n成立,这样就可以双剑合并了. 素数是一个大于1的自然数,它的因数只有1与它自己本身 ...

  5. 1642: 【USACO】Payback(还债)

    1642: [USACO]Payback(还债) 时间限制: 1 Sec 内存限制: 64 MB 提交: 190 解决: 95 [提交] [状态] [讨论版] [命题人:外部导入] 题目描述 &quo ...

  6. Appium自动化 - 设置unicodeKeyboard: True运行脚本后,手机输入时无法调出软键盘

    问题背景 做appium自动化的时候,使用了UiAutomator1驱动,然后设置了UnicodeKeyboard 执行自动化脚本之后,玩手机的时候发现平时用的输入法键盘没法调出来了 'automat ...

  7. pycharm文件名颜色代表的含义

    在使用pycharm过程中,文件名有不一样的颜色. 绿色:已经加入版本控制暂未提交 红色:未加入版本控制 蓝色:加入版本控制,已提交,有改动 白色:加入版本控制,已提交,无改动 灰色:版本控制已忽略文 ...

  8. 001_Chrome 76支持原生HTML 图片懒加载Lazy loading

    Table Of Content 什么是懒加载? 语法参数及使用方式? 有哪些特点? 与js有关的实践 什么是懒加载? 技术背景 Web应用需要经常向后台服务器请求资源(通过查询数据库,是非常耗时耗资 ...

  9. 七、【Docker笔记】Docker中网络基础配置

    一个系统一般都包含多个服务组件,这些大量的服务组件不可能放在同一个容器中,这就需要多个容器之间可以互相通信.Docker提供了两种方式来实现网络服务:映射容器端口到宿主主机.容器互联机制. 一.端口映 ...

  10. 1008 Elevator (20 分)

    The highest building in our city has only one elevator. A request list is made up with N positive nu ...