Golang使用go mod管理包

之前使用GOPATH全局变量进行go工程的包管理,总觉得有些别扭。今天抽时间研究了一下go mod,发现还是很方便的。

环境准备

1. 设置GO111MODULE

GO111MODULE有三个取值,分别是on, off, auto,默认值为auto。

on:开启模块管理,忽略GOPATH目录,根据go.mod下载依赖。

off:关闭模块管理,从GOPATH目录寻找包。

auto:如果在$GOPATH/src目录中,则忽略go.mod,否则根据go.mod下载依赖。

如果你的代码没有处于$GOPATH/src目录中,可以使用默认的auto,否则,需要执行:

go env -w GO111MODULE=on

2. 设置GOPROXY

由于墙的原因,很多google的包下载不到,下载得到的包,由于很多处于境外服务器上,速度也比较慢,可以使用七牛云的代理,执行:

go env -w GOPROXY=https://goproxy.cn,direct

准备测试代码

以一个简单的打印成绩单的工程为例,该工程目录如下:

├── go.mod
├── go.sum
├── main.go
└── transcript
    ├── transcript.go
    └── transcript.yaml

代码内容如下:

// main.go
package main

import (
	"github.com/haoranzeus/blogcode/202108/code01/transcript"
)

func main() {
	transcript.GetScores()
}
// transcript/transcript.go
package transcript

import (
	"fmt"
	"gopkg.in/yaml.v2"
	"io/ioutil"
)

func GetScores() {
	file, err := ioutil.ReadFile("transcript/transcript.yaml")
	if err != nil {
		panic(err)
	}
	result := make(map[string]map[string]string)
	yaml.Unmarshal(file, &result)
	for key, value := range result["成绩"] {
		fmt.Println(key, value)
	}
}
# transcript/transcript.yaml

成绩:
  语文: 100
  数学: 99
  外语: 98

使用go mod

1. 初始化

执行:

go mod init github.com/haoranzeus/blogcode/202108/code01

当前目录下出现一个文件:

go.mod

内容为:

module github.com/haoranzeus/blogcode/202108/code01

go 1.13

此时,这个包已经通过go.mod进行管理了。

2. 运行代码

可直接执行go run main.go

此时go mod会根据代码中的依赖关系,自动下载所需要的包,比如这里的yaml包。执行结果

语文 100
数学 99
外语 98

再看go.mod文件,此时内容已经是:

module github.com/haoranzeus/blogcode/202108/code01

go 1.13

require gopkg.in/yaml.v2 v2.4.0

附示例代码:https://github.com/haoranzeus/blogcode/tree/main/202108/code01

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值