Loading

golang 包&go mod

image-20240221225551787

go mod

初始化项目 go mod init

项目开发中首先要在项目目录中用 go mod 命令生成一个 go.mod 文件管理项目的依赖

image-20240221230014988

自定义包

image-20240221230727234

自定义包:
// 自定义包 一定要放在第一行
package calc

/*
  定义的方法、变量、结构体等首字母大写表示公有方法,其他包中可以引入该方法
  首字母小写表示私有方法,其他包中不能引入,只能在当前包使用
*/

func Sum(x, y int) int {
	return x + y
}

引入包:
package main

// 文件中只引入一个包则是"",引入多个包是("" "")
import (
	"fmt"
	// 引入golang_7/calc文件夹下的所有包
	"golang_7/calc"
)

func main() {
	// 使用calc包中的方法,不管calc文件夹下有多少go文件,package是calc则使用calc调用
	fmt.Println(calc.Sum(1, 1))

}

  • 一个文件夹下面直接包含的文件只能归属一个 package,同样一个 package 的文件不能 在多个文件夹下。

  • 包名可以不和文件夹的名字一样,包名不能包含 - 符号

    • 比如文件夹A下面的B.go文件 package 声明为C,B文件里方法有D,引入的时候是import "A",引入A文件下所有的包,调用包方法是C.D
  • 包名为 main 的包为应用程序的入口包,这种包编译后会得到一个可执行文件,而编译 不包含 main 包的源代码则不会得到可执行文件

给包起别名
import (
	// 给包起别名
	f "fmt"
	c "golang_7/calc"
	
)

func main() {
	// 通过别名调用 不能再使用原包名
	f.Println("123")
	c.Sum(1,1)
}
匿名导入包
// 如果引入包未使用会报错,可以用_ 匿名导入包
import _ "golang_7/calc"
func main() {

}

init()函数

image-20240221233449765

/* 自定义的包*/
package calc

import "fmt"

// 定义init方法
func init() {
	fmt.Printf("init")
}

func Test() {
	fmt.Printf("test")
}

package main
// 导入自定义包
import "golang_7/calc"

func main() {
	// 先执行init,再执行test
  // init实际执行在main方法之前,先执行init,再执行main,调用test
	calc.Test()

}

image-20240221233522526

第三方包

常见的第三方包:https://pkg.go.dev/

# 是否开启go mod
export GO111MODULE=auto  
  • GO111MODULE=off
    go命令行将不会支持module功能,寻找依赖包的方式将会沿用旧版本的通过vendor目录或者GOPATH模式来查找

  • GO111MODULE=on
    go命令行会使用modules,不会去GOPATH目录下查找

  • GO111MODULE=auto(默认值)
    go命令行将会根据当前目录来决定是否启用module功能。下面两种情形将启用module功能:

    ​ a. 当前目录在GOPATH/src之外且该目录包含go.mod文件
    ​ b. 当前文件在包含go.mod文件的目录下面

# 下载包的国内源环境变量
export GOPROXY=https://goproxy.cn,https://goproxy.io,direct
安装第三方包
通过go get 下载-全局下载:
go get 包地址
通过go mod download下载-全局下载:

包会自动下载到$GOPATH/pkg/mod,多个项目可以共享缓存的 mod,使用 go mod download 的时候首先需要在你的项目里面引入第三方包, GOPATH路径可以通过go env查看

package main

import (
	"fmt"
	// 在代码中引入第三方包 decimal
	"github.com/shopspring/decimal"
)

func main() {

	q := decimal.NewFromInt(3)
	fmt.Println(q)
}

# 项目路径下
go mod download
go mod vendor

会将依赖复制到当前项目的 vendor 下,使用 go mod vendor 的时候首先需要在你的项目里面引入第三方包

go mod 命令汇总
download    下载依赖的module到本地cache
edit        编辑go.mod文件
graph       打印模块依赖图
init        在当前文件夹下初始化一个新的module, 创建go.mod文件
tidy        增加丢失的module,去掉未用的module
vendor      将依赖复制到vendor下,注意依赖需要在import 中声明后才能进行导入
verify      校验依赖
why         解释为什么需要依赖

PS:go get ./... 命令可以查找出当前项目的依赖

posted @ 2024-02-22 11:28  木子七  阅读(35)  评论(0编辑  收藏  举报