首页 > 其他分享 >golang 包&go mod

golang 包&go mod

时间:2024-02-22 11:34:34浏览次数:43  
标签:main package golang init go calc 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 ./... 命令可以查找出当前项目的依赖

标签:main,package,golang,init,go,calc,mod
From: https://www.cnblogs.com/Mickey-7/p/18026957

相关文章

  • 关于Golang中函数的接收者不同对接口的使用的影响理解
    对于函数而言:接收者为指针会改变接收者本身的值接收者为值则只是拷贝,不会改变原本的值并且值和指针可以任意调用对方的方法,即值可以调用接收者为指针的方法,指针可以调用接收者为值得方法。原因是:可以自动指针解引用和值寻址对于接口而言:接收者为指针的方法,不能将值赋值给接......
  • Go 编程基础
    一、Go开发环境搭建 暂无二、Go基础知识 三、类型与变量 四、常量与运算符 五、控制语句 六、数组array 七、切片slice 八、map 九、函数function 十、结构struct 十一、方法method 十二、接口interface 十三、反射reflection 十......
  • Spring Kafka AckMode介绍
     原文链接:https://blog.csdn.net/qq1309664161/article/details/116994341一:AckMode介绍kafka消费端在读取数据后,会向Kafka服务端提交偏移量,来记录消费端读取数据的位置。提交偏移量分为手动提交和自动提交,为了保证数据读取的安全性,我们一般设置成手动提交偏移量。在Springb......
  • Go语言精进之路读书笔记第32条——了解goroutine的调度原理
    Go的运行时负责对goroutine进行管理,所谓的管理就是“调度”。调度就是决定何时哪个goroutine将获得资源开始执行,哪个goroutine应该停止执行让出资源,哪个goroutine应该被唤醒恢复执行等。32.1goroutine调度器将goroutine按照一定算法放到CPU上执行的程序就称为goroutine调度器(g......
  • Go 100 mistakes - #50: Checking an error type inaccurately
       ......
  • Go - Type assertions and Type switches
    TypeassertionsForanexpression x of interfacetype,butnota typeparameter,andatype T,theprimaryexpressionx.(T)assertsthat x isnot nil andthatthevaluestoredin x isoftype T.Thenotation x.(T) iscalleda typeassertion.M......
  • Go - wrap an error
        ......
  • Go - panic
        ......
  • Go - argument evaluation with defer
        ......
  • golang指针和结构体
    指针指针操作指针包括指针地址、指针类型和指针取值&:&符号放在变量前面进行取地址操作**:*放在变量前面根据地址进行取值指针地址:funcmain(){ varaint=1 //a的值是1--类型是int--,地址是0xc0000120c0,&是地址符号 fmt.Printf("a的值是%v--类型是%T--,地......