第二篇:go包管理
文章目录
- 第二篇:go包管理
-
- 一、包管理
-
- [1 包](#1 包)
- [2 自定义包](#2 自定义包)
- [3 init函数(特殊函数)](#3 init函数(特殊函数))
- [4 包导入的几种方式](#4 包导入的几种方式)
- [5 go mod模式创建项目](#5 go mod模式创建项目)
- [6 参考博客](#6 参考博客)
一、包管理
1 包
即模块,组织go源代码,提供了更好的可重用性和可用性。
每个文件中第一行是package packagename
,代表指定了该文件属于那个包。
go语言中,同一层级的文件属于一个包,比如第一层级
package main
,如果新定义一个demo文件夹,在其中的文件中书写package main
(虽然都叫main包,但是不是同一个包),在第一层级的package main
中引用demo文件下的main包,是属于main.函数名
的形式。【原理是这样,但是这样写会报错😂】
2 自定义包
-
go语言的代码必须放在gopath的src路径下;
-
包导入是从gopath的src路径下开始检索(开始找)【并非是在该项目下查找】;
-
除了main包以外,建议包名就叫文件夹名,一个文件夹下的包名必须一致【也可以包名叫mypackage,其中所有文件中第一行是package test】;
-
同一个包下,变量,函数只能定义一次【在包中的变量声明,全局变量不能使用
a:=10
,这种类型,必须使用全定义或者半定义】; -
同一个包下的变量和函数可以直接相互使用【可以把包想象为是一整个大的文件】;
-
包内的函数或变量,想让外部包使用,必须首字母大写;
gopackage myPackage // 包内的变量、函数想让外部使用,必须首字母大写 var Name = "yangyi" var Age = 18 // 导入使用 package main import ( "day01/myPackage" // 自动进行包的导入 "fmt" ) // 内置包 func main() { fmt.Println(myPackage.Name) } import test "day01/myPackage" == python中的 import ... as ...
Java中可以使用
public private
等关键字来对外界使用进行限制。【可以使用public static
将类封装成工具类】 -
以后下的第三方包都是放在gopath的src路径下【编译的时候,也就是将第三方包的函数也编译到可执行文件中】
3 init函数(特殊函数)
可以在包内的文件中书写init
函数。
go
// mypackage包中
package mypackage
import "fmt"
// 特殊函数,初始化函数,在导包的时候就会执行,并且可以定义多个
// 用处: 初始化工作【每次导入包,执行这个函数】
func init() {
fmt.Println("我是init函数...")
}
func init1(){
fmt.Println("我是init函数...")
}
main
包也是会执行init函数
,进行初始化。
4 包导入的几种方式
-
import "day02/mypackage"
-
import 名字 "day02/mypackage"
包重命名使用方式:
名字.变量/函数
-
import _ "day02/mypackage"
包只导入,不使用
5 go mod模式创建项目
go语言有go mod;python中有虚拟环境;Java中有maven;
go语言没有一个统一包管理的地址,大家都放到github上。【由于之前下载的包,都会放到src路径的github.com下,所以,无法实现一个多版本的控制】【哈哈】
1.11版本推出go modules机制,简称mod。
go
set GO111MODULE=on // windows 将mod开启
set GO111MODULE=off // 将mod关闭
export GO111MODULE=on // linux
创建go mod的两种方式:
go
// 第一种:
1 新建一个项目文件夹,如day01项目
2 进入文件夹,打开cmd,输入 go mod init day01,会生成 go.mod文件(该项目名 该项目依赖的go的版本,第三方包版本)

go
// 下载beego
go get github.com/astaxie/beego

如果没有go mod,之前会在src路径的github.com路径下安装;有go mod之后,会在pkg的路径下进行存放。【之后进行第三方包的寻找,不是基于src路径寻找,而是基于go mod配置的路径进行寻找】

PS:自己写的包放在项目中,go sdk就是go的安装路径,如果有go mod,第三方包就是pkg路径下的。
我们这里需要配置代理,如果不进行配置的话。【速度慢到无法想象】

go
package main
import (
"github.com/astaxie/beego"
) // 内置包
func main() {
beego.Run() // 启动beego即可
}
可以把go mod文件直接拷贝给别人,别人直接使用go mod download就可以安装第三方包。