[go]包和工程管理
一、系统环境变量
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
)
module语句指定包的名字(路径)
require语句指定的依赖项模块
replace语句可以替换依赖项模块
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]包和工程管理的更多相关文章
- emacs工程管理,cedet ede插件自动构建Make,Automake
鉴于自己一直都是在做客户端开发方面的工作,服务端很多知识都随着时间淡忘了,最近有一个计划,用一些时间补一下基础.所以早上很早就起床,花了一点时间大致浏览了一下BSD socket的相关API,然后用G ...
- Go语言 函数,工程管理
Go语言 函数,工程管理 1.无参无返回值函数的使用 package main import "fmt" func main() { // 无参无返回值函数的调用:函数名() fu ...
- go语言基础之工程管理和工作区介绍
1.工程管理 在实际的开发工作中,直接调用编译器进行编译和链接的场景是少而又少,因为在工程中不会简单到只有一个源代码文件,且源文件之间会有相互的依赖关系.如果这样一个文件一个文件逐步编译,那不亚于一场 ...
- go语言入门(5)工程管理
在工程中不会简单到只有一个源代码文件,且源文件之间会有相互的依赖关系,早期Go语言使用makefile作为工程管理的临时方案,后来的Go命令行工具的革命性之处在于彻底消除了工程文件的概念,完全用目录结 ...
- go语言20小时从入门到精通(六、工程管理)
在实际的开发工作中,直接调用编译器进行编译和链接的场景是少而又少,因为在工程中不会简单到只有一个源代码文件,且源文件之间会有相互的依赖关系.如果这样一个文件一个文件逐步编译,那不亚于一场灾难. Go语 ...
- Golang编程的工程管理
Golang编程的工程管理 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.
- 使用BLADE构建c++工程管理
使用BLADE构建c++工程管理 字数764 阅读2753 评论2 喜欢4 一. c++工程依赖管理 之前在百度一直使用comake2构建c++项目,十分方便.免去了手写Makefile的痛苦,很多项 ...
- Makefile 工程管理
Makefile 工程管理 Makefile 规则 --变量 在Makefile中,用户除了可以自己定义变量外,还可以使用存在系统已经定义好的默认变量 $^:代表所有的依赖文件 $@:代表目标 $&l ...
- make工程管理器
1.概述 大型程序中,人们希望工具自动识别修改的文件,而且不需要输入冗长的命令,就可以进行编译链接等操作,于是make工程管理器应运而生. make可以自动识别文件时间戳,只处理修改的文件: make ...
随机推荐
- Unable to locate JAR/zip in file system as specified by the driver definitio
把之前的驱动包删掉,然后把你的驱动包导入就行了 现在OK键就算正常了
- ios shell打包脚本 xcodebuild
#! /bin/bash project_path=$() project_config=Release output_path=~/Desktop build_scheme=YKTicketsApp ...
- mac 中使用git 和pycharm提交项目
一.安装Git 1.验证git是否安装: 终端中输入: git 如果安装过出现: 2.安装git: 进入https://git-scm.com: 点击 Download 2.23.0 for Mac ...
- javascript创建函数的方法
函数对任何语言来说都是一个核心的概念.函数,是一种封装(将一些语句,封装到函数里面). 通过函数可以封装任意多条语句,而且可以在任何地方.任何时候调用执行. ECMAScript中的函数使用funct ...
- 【宇哥带你玩转MySQL】索引篇(一)索引揭秘,看他是如何让你的查询性能指数提升的
场景复现,一个索引提高600倍查询速度? 首先准备一张books表 create table books( id int not null primary key auto_increment, na ...
- Python input和print函数
一.input函数 可以看出,input()函数默认输入的是字符串类型,需要eval()函数将其进行转换. 区别直接赋值的情况,Python可以自动识别数据类型 二.print函数 1.直接输出 无论 ...
- C - Monkey and Banana
文章目录 题意如下 思路如下 题解如下: A group of researchers are designing an experiment to test the IQ of a monkey. ...
- Android 图片裁剪库 uCrop
引语 晚上好,我是猫咪,我的公众号「程序媛猫咪」会推荐 GitHub 上好玩的项目,挖掘开源的价值,欢迎关注我. 现在 Android 开发,离不开图片,必然也需要图片裁剪功能,这个实现可以调用系统的 ...
- C++静态库和动态库
静态库与动态库 首先简单介绍一下gcc 指令 ubuntu 下安装gcc g++ 方法 sudo apt install gcc g++ gcc 的简单使用 建立hello.c 源文件 gcc hel ...
- 一、Python3.8的安装
一:什么是Python解释器 解释器(英语:Interpreter),又译为直译器,是一种电脑程序能够把高级编程语言一行一行直接转译运行. 解释器不会一次把整个程序转译出来,只像一位“中间人”,每次运 ...