5多模块
2022年6月14日
教程
https://github.com/link1st/link1st/tree/master/workspaces
初始化多模块工作区
go work init
# 创建目录
mkdir hello
cd hello
# 代码仓库启动 go mod 依赖管理,生成 go.mod 文件 设置仓库
go mod init github.com/link1st/link1st/workspaces/hello
# 下载依赖包
go get github.com/link1st/example
# 创建编写 hello目录的 main.go 文件
hello目录的 main.go 代码
// Package main main 文件,go 多模块工作区演示代码
// 实现将输入的字符串反转输出并输出
package main
import (
"flag"
"fmt"
"github.com/link1st/example/stringutil"
)
var (
str = ""
)
func init() {
flag.StringVar(&str, "str", str, "输入字符")
flag.Parse()
}
func main() {
if str == "" {
fmt.Println("示例: go run main.go -str hello")
fmt.Println("str 参数必填")
flag.Usage()
return
}
// 调用公共仓库,进行字符串反转
str = stringutil.Reversal(str)
// 输出反转后的字符串
fmt.Println(str)
return
}
代码 使用到依赖包 "github.com/link1st/example/stringutil"
安装依赖
go mod tidy
去掉依赖校验 把 hello\go.mod 的 require github.com/link1st/example v0.0.0-20220318153745-5f3909db9919 改成 require github.com/link1st/example v0.0.0 不然会报错
修改 根目录 go.work 文件
意思是把 github.com/link1st/example 指向 ./example1 这个目录
go 1.18
use (
./hello
// ./example
)
replace (
github.com/link1st/example => ./example1
)
接下来在 根目录创建 example1/stringutil/reversal.go 文件 代码
// Package stringutil 字符串操作包
package stringutil
// Reversal 字符串反转
func Reversal(str string) string {
r := []rune(str)
for i, j := 0, len(r)-1; i < j; i, j = i+1, j-1 {
r[i], r[j] = r[j], r[i]
}
return string(r)
}
在 example1/stringutil 目录 执行
# 代码仓库启动 go mod 依赖管理,生成 go.mod 文件 设置仓库
go mod init github.com/link1st/example
返回 hello 目录
执行
go run main.go -str "hello world"