前言

无论什么Python还是Golang当你的代码量达到一定程度时,就需要使用package来分类、组织我们的代码文件。

 

go-package概念

fmtosio

在目前我使用的go1.11.5中每1个.go文件都需要存放在Gopath路径下的1个文件中(包)。

 .go文件最开始声明这是1个main包,也就是程序的入口。

 

初识 go-package

在go语言中1个文件夹可以称为1个包,在文件夹(包)可以创建多个.go文件。

在同1个文件夹(包)中的.go文件必须pakage关键字指定同1个包名。

 

在go语言中包分为2类

1.main包:使用main包可以让我们写的程序编译成1个可执行的二进制文件,所以main包就是程序的入口。

2.非main包:可以规范和分类我们在程序执行时所需要的功能

如果多个.go文件在同1个文件夹(包)中,那它们就可以直接使用相互的功能,无需导入包。 

在包同定义的功能首字母大写,才可以被外部包所调用,否则只能在同1个包中使用。

Golang语言包管理(package)

 

 

使用package

定义package

一般来说除了1个程序入口(main包)之外,在Go项目中其他都是我们程序开发人员***定义的(工具包),以便调用。

mai包可以生成1个可执行文件。

我们使用package关键字定义1个包,

如果当前package想要被其他包调用,那么该工具包中的标识符(变量名、函数名、struct名、interface名)首字母大写表示可见性(对外可见)。

 

Golang语言包管理(package)

 在Go中1个文件夹就是1个package, 所以package中的.go文件一般会和package同名。  

 programmer.go

 

init函数

包中的init函数在调用该包时自动执行

 

init()函数执行顺序

main

Golang中1个包可以包含1个init函数,不一样的是这个init函数需要自己定义。

init()

Golang语言包管理(package)

 

 

 

导入package

调用Go里面的包需要从Go project的src目录后面的文件夹开始import。

Golang语言包管理(package)

 

 hello/package_practice/devlepment

 

 

  

go mod第三方依赖包管理

为什么需要go mod?

Golang语言包管理(package)

 

Golang中所有的项目、项目依赖的第三方库,默认情况下全部放在go path/src这1个目录下。

如果要使用N个不同版本的第三方依赖库,应该怎么解决?有没有Python env这种环境隔离机制?

 

1.godep依赖包管理

vendorvendor

 

安装

 

基本命令

 

使用godep

godep saveGodepsvender
GodepsGodeps.json
vender

 

vender机制

Go1.5版本之后开始支持,能够控制Go语言程序编译时依赖包搜索路径的优先级。

如果项目require某个依赖包,如果你有vendor目录。

vender$GOAPTH/src

 

godep开发流程

godep saveGodeps.json

 

2.go module依赖包管理

go modulego module

 

0.如果你使用的是go 1.13之前的版本,那么在使用go mod之前需要手动开启对go mod的支持:

go moduleGO111MODULEoffonautoauto
GO111MODULE=offGOPATHvendorGO111MODULE=onGOPATHvendorgo.modGO111MODULE=auto$GOPATH/srcgo.mod
GO111MODULE=ongo module

 

go.modgo.sum

go.mod:有的像node.js的pakage.json存储当前项目所有依赖库的版本

go.sum:所有依赖的集合

 

我使用的就是go1.13所以不需要每次都开启go mod模式。

 

go mod命令

我们使用go mod无非处于2种目的

目的1.我自己开发的项目生成go.mod让别人同步我的依赖包

目的2.别人写得项目,我跟他的依赖包版本保持一致。

 

自己生成go.mod流程

  

go mod文件语法

go.mod文件记录了项目所有的依赖信息,其结构大致如下:

replace语法

在国内访问golang.org/x的各个包都需要FQ,你可以在go.mod中使用replace替换成github上对应的库。

  

go get

go get
go get -ugo get -u=patchgo get package@version
go mod download

 

3.运行1个gin项目

我使用go 1.14版本结合go mod,在go path之外运行1个gin项目。

go mod环境已经准备完毕 ,开始写代码吧。

代码写完了就开始运行代码吧。

 

4.依赖包版本迭代 

修改go.mod文件中的require版本即可。

 Golang语言包管理(package)

 

 5.重启

go mod第三方包管理比Python还方便,不用自己去 pip install requirement.txt了。

运行时自动根据go.mod更新。