5多模块

野生程序员2022年6月14日
大约 2 分钟

教程

https://github.com/link1st/link1st/tree/master/workspacesopen in new window

初始化多模块工作区

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/stringutilopen in new window"

安装依赖

go mod tidy

去掉依赖校验 把 hello\go.mod 的 require github.com/link1st/exampleopen in new window v0.0.0-20220318153745-5f3909db9919 改成 require github.com/link1st/exampleopen in new window v0.0.0 不然会报错

修改 根目录 go.work 文件

意思是把 github.com/link1st/exampleopen in new window 指向 ./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"
上次编辑于: 2022/6/21 16:15:33
贡献者: qq547176052
评论
Powered by Waline v2.6.3