go语言引入第三方包

go语言引入第三方包

第三方包

假设我们有个项目叫caseshow,我们先创建这个目录,并初始化一下

mkdir caseshow
cd caseshow
go mod init caseshow

此时在caseshow目录下会自动产生一个go.mod文件
比如我们想使用一个redis客户端:github.com/go-redis/redis/v8,在当前路径下直接执行go get命令即可:

go get github.com/go-redis/redis/v8

目录下会多一个go.sum文件,go.mod文件里面也多了关于redis库的内容,之后就可以直接用了。

本地包

在项目开发中会复用本地的一些代码,这就涉及到了本地包的引入。

情况1 同目录下

在同路径下不能存在多个package名,如果要定义其他的package,可以创建一个对应名字的目录,把代码放下面,之后再引用。
假设在caseshow中有个本地开发的包mymodule,里面有个方法Pprint,结构如下

# tree
.
├── go.mod
├── go.sum
├── mymodule
│   └── pprint.go
└── redis.go

1 directory, 4 files

如果caseshow目录下的其他地方要用这个方法,则使用caseshow + package名称导入即可。
比如main.go:

package main

import "caseshow/mymodule"

func main(){
    
    mymodule.Pprint("jack")
}

情况2 不同目录下

假设有另一个项目caselive,与caseshow同级,该目录下有个包yourmodule,里面有个方法Yprint:

# tree
.
├── caselive
│   ├── go.mod
│   ├── main.go
│   └── yourmodule
│       └── yprint.go
└── caseshow
    ├── go.mod
    ├── go.sum
    ├── main.go
    ├── mymodule
    │   └── pprint.go
    └── redis.go

4 directories, 8 files

此时在caseshow中要调用caselive中yourmodule的Yprint方法,可以用replace参数来实现。
在caseshow的go.mod中增加caselive的引入:

module caseshow

go 1.15

require github.com/go-redis/redis/v8 v8.4.2 // indirect
require caselive v0.0.0

replace caselive => ../caselive

之后就能直接调用了:

package main

import "caseshow/mymodule"
import "caselive/yourmodule"

func main(){
    
    mymodule.Pprint("jack")
    yourmodule.Yprint("jack")
}

理解理解Golang包导入,import、包名、目录名的关系

  • import后面的最后一个元素是路径,就是目录,并非包名。go语言的惯例只是一个特例,即恰好目录名与包名一致罢了。
 import "fmt"
fmt.Println("xxx")

这里上下两行中虽然都是“fmt",但同样含义不同,一个是路径 ,对于标准库来说,是$GOROOT/src/fmt这个路径。而第二行中的fmt则是包名。gc会在$GOROOT/src/fmt路径下找到fmt包的源文件。

  • 包名和目录名没有关系,但是包名最好等于目录名
  • 同一个目录下只能有一种包名。

按照Golang语言习惯,一个go package的所有源文件放在同一个目录下,且该目录名与该包名相同,比如libproj1/foo目录下的package为foo,foo1.go、 foo2.go…共同组成foo package的源文件。但目录名与包名也可以不同,

引入从github下载包的一些情况

一些从github下载的包在引入时会报错,

could not import xxx (no required module provides package ...

这时可尝试删除引入的包中的go.mod文件,保存一下再试试

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值