如果你对该文章中的内容有疑问/不解,可以点击此处链接提问
要注明问题和此文章链接地址 点击此处跳转
接口
学习接口interface的使用,进行抽象和多态实现。学会定义接口实现结构体。
在Go语言中,接口(interface)主要用于抽象和多态实现,使用方式如下:
- 定义接口
接口使用type和接口命名定义:
<code class="language-go">type Reader interface {
Read(p []byte) (n int, err error)
}
</code>
- 实现接口
结构体实现接口方法即可实现接口:
<code class="language-go">type File struct {}
func (f File) Read(p []byte) (n int, err error) {
// 实现Read方法
}
</code>
- 接口作为参数
函数的参数使用接口作为类型:
<code class="language-go">func ReadData(r Reader) error {
// r可以是任何实现了Reader接口的对象
}
</code>
- 接口组合
一个接口可以包含其他接口的方法集:
<code class="language-go">type ReadWriter interface {
Reader
Writer
}
</code>
这样就可以利用接口进行抽象定义,以及多态灵活实现,是Go语言编程非常重要的技巧。
包管理
写包
好的,来看一个更详细的Go依赖管理示例:
- 创建项目目录并初始化模块
<code class="language-bash">mkdir hello
cd hello
go mod init example/hello
</code>
- 编写main.go文件,导入fmt包
<code class="language-go">package main
import "fmt"
func main(){
fmt.Println("hello world")
}
</code>
- 运行
go mod tidy
,会生成go.mod文件:
<code>module example/hello
go 1.17
require (
fmt v0.0.0-00010101000000-000000000000
)
</code>
- 使用
go get -u
命令升级依赖
<code>go get -u
</code>
go.mod会更新为:
<code>require fmt v0.3.3
</code>
- 如果需要指定版本,可以使用
go get pkg@version
<code>go get github.com/pkg/fmt@v0.2.3
</code>
-
使用
go mod graph
查看依赖图 -
go mod edit -replace
可以替换本地依赖 -
go list -m all
可以查看总依赖
以上演示了Go Modules的主要用法,可以充分利用来管理Go项目的依赖。
第三方包管理
在Go语言中使用第三方package的主要方式是通过go get命令获取依赖,常用的方法有:
- go get
go get可以下载依赖包,默认会找到该模块的latest release版本:
<code>go get github.com/spf13/cobra
</code>
- 指定版本go get
可以使用@版本号来获取指定版本:
<code>go get github.com/spf13/cobra@v1.1.3
</code>
- 更新依赖包
使用-u参数可以更新到最新版本:
<code>go get -u github.com/spf13/cobra
</code>
- 查看依赖
go list -m all 可以查看当前项目的依赖:
<code>go list -m all
</code>
- go mod命令
go mod tidy可以整理依赖,go mod graph可以查看关系图。
正确使用go get和go mod命令可以很好地管理Go模块的第三方依赖。要注意依赖版本的管理。