Golang管理包

使用golang编写项目的时候,除了安装自带的包之外,还涉及到引入他人或是自己写的包,这就涉及到了如何正确管理和引入的问题了。

一、

在golang中,使用import引入包时,会自动检测安装golang时设定的GOROOT路径中是否包含这个数据包。

 所以如果涉及到一个常用的,不需要再修改的包,可以直接安装在GOROOT目录下。

可以使用 go env查看自己的GOROOT路径,或者是运行时报错也会提醒你路径是多少。

二、

但如果我们要引入的包不是非常完善,且需要我们进行修改,比如我们自己编写的一个包,我们不想把他放到GOROOT下而是和项目文件一起,因为项目文件一般在其它地方。这时候就可以选择使用Go Mod来进行包的管理。

.
├── main.go
├── go.mod
├── mypackage
    ├──mypackage1.go
    ├──mypackage2.go
    ├── go.mod

如果我们要在main.go中使用mypackage1.go和mypackage2.go。

首先我们需要初始化mypackage

go mod init mypackage

或是直接创建go.mod文件,并添加 

module mypackage

go 1.20

其中go 1.20表示的是当前你系统中go语言的版本,而module其实并不表示包的名称,只是为了统一所以一般定义为包名。

而在mypackage中,mypackage1.go和mypackage2.go只需要在首行写

package mypackage

表示mypackage1.go和mypackage2.go都是属于mypackage这个包的。这段语句才指示了包的名称。

而在main.go同目录下的go.mod文件,则需要添加以下内容

module anyName

go 1.20

require mypackage v1.0.0
replace mypackage => ./mypackage

此时,require表示需要引入mypackage这个包,v1.0.0指示版本号。replace则是将mypackage替换为一个相对路径找到mypackage。

在main.go中引入mypackage则只需要添加以下内容即可

import "mypackage"

补充 

上面提到module其实并不是指示包名,做如下测试。

//main.go

package main

import(
    "fmt"
    "m"
)

func main(){
    fmt.Println("mypackage.E")    //output: 1
}
//go.mod

module project1

go 1.20

require m
replace m => ./mypackage
//mypackage/mypackage1.go

package mypackage

var e = 1
//mypackage/mypackage2.go

package mypackage

var E = e
//mypackage/go.mod


module my

go 1.20

即便require的名称和包的名称和module的名称都不一样,只要路径对了,且指示了

package mypackage

就可以引入,并正常运行

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值