【5.0】Go语言基础之包的使用
【一】包的作用
- 为了便于组织代码,同一种类型的代码,写在同一个包下,便于管理
【二】定义包的步骤
【1】新建一个文件夹
【2】内部有很多go文件
【3】go文件的第一行声明包名
- 在每个go文件的第一行,都要声明包名,并且包名必须一致
package user
【4】在一个文件夹下只能有一个包(同级)
- 在一个文件夹下只能有一个包(同级)
- user 下的 info/loacation/school 每一个文件中的第一句都是一个包下
package user
【5】同一个包下,变量和函数共享
(1)变量和函数共享
- 在同一个包下,变量和函数都是共享的(一个包相当于一个go文件)
- location 内的变量 在 school 中不需要导入就可以直接使用
info.go
package user
var name string = "DreamCity"
var age int = 100
school.go
package user
import "fmt"
func showInfo() {
fmt.Println("这所学校的名字是 :>>>>", name, "这所学校的年龄是 :>>>>", age)
}
(2)在一个包下,不能重复定义变量和函数
location.go
package user
/*
*/
// 'showInfo' redeclared in this package
// showInfo 不能在这个包被重复声明
func showInfo() {
}
【6】除了main包,其他都是用来被导入使用的
-
无论是函数,还是变量,大写字母开头表示导出,可以在其他包使用
-
尽量包名就是文件夹名
-
user/school.go
package user
import "fmt"
// 函数名小写 不可在包外部被调用和使用
func showInfo() {
fmt.Println("这所学校的名字是 :>>>>", name, "这所学校的年龄是 :>>>>", age)
}
// 函数名大写,可以导出被其他包使用
func ShowSchool() {
fmt.Println("这所学校的个人信息是 :>>>> ")
// 函数名小写 不可在包外部被调用和使用,调用同一个包下的函数
showInfo()
fmt.Println("这所学校的名字是 :>>>>", name)
}
s1.go
package main
import "Project1/day02/user"
func main() {
user.ShowSchool()
// 这所学校的个人信息是 :>>>>
// 这所学校的名字是 :>>>> DreamCity 这所学校的年龄是 :>>>> 100
// 这所学校的名字是 :>>>> DreamCity
}
【二】老版本的GOPATH和新的Go Modules的区别
- 在Go 1.11之前,Go语言的依赖管理主要依赖于GOPATH。
- 但自从Go 1.11版本引入Go Modules后,推荐使用Go Modules进行依赖管理。
【1】GOPATH模式:
- 所有项目的代码都必须放在GOPATH路径下的src文件夹下。
- 第三方包也需要放在GOPATH路径下。
- 包括项目代码和第三方包都必须在GOPATH路径下,否则会找不到。
【2】Go Modules模式:
- 代码不再需要放在GOPATH路径下的src文件夹下,可以放在任何路径。
- 项目路径下必须有一个go.mod文件,通过
go mod init
自动生成。 - 通过
go mod init 项目名
来初始化项目。
【三】将GOPATH修改为Go Modules项目
- 运行
go env -w
修改Go的环境变量。 - 可以移动项目目录,不再受限于GOPATH。
- 运行
go mod init 项目名
在项目路径下生成go.mod文件,自动生成内容,不需要手动修改。- 例如:
module 项目名 go 1.17
- 例如:
- 如果项目中使用了第三方包,可以运行
go mod tidy
去下载第三方包。
以上是关于Go语言中GOPATH和Go Modules的区别以及将项目从GOPATH修改为Go Modules的步骤。
本文来自博客园,作者:Chimengmeng,转载请注明原文链接:https://www.cnblogs.com/dream-ze/p/17826365.html