【5.0】Go语言基础之包的使用

发布时间 2023-11-11 21:07:43作者: Chimengmeng

【一】包的作用

  • 为了便于组织代码,同一种类型的代码,写在同一个包下,便于管理

【二】定义包的步骤

【1】新建一个文件夹

【2】内部有很多go文件

image-20231111110108007

【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
}

image-20231111112331488

【二】老版本的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的步骤。