DoubleLi

qq: 517712484 wx: ldbgliet

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  4737 随笔 :: 2 文章 :: 542 评论 :: 1615万 阅读
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

文章目录
样例目录结构
建立本地module的方式
调用本地module的方式
注意事项

go mod 的模式, 可以管理包/模块的依赖关系, 从go1.16开始,会自动开启.
这个跟GOPATH的模式区别很大, 在引用本地包/模块(module)的时候,我们可以采用本文描述的办法.
样例目录结构
go
└─src
   ├── audio-websocket
   │   ├── go.mod
   │   ├── go.sum
   │   ├── README.md
   │   └── main.go
   └── utils@v0.0.0
       ├── go.mod
       ├── utils.go
       └── utils_test.go

建立本地module的方式
创建本地模块并初始化

mkdir utils@v0.0.0
cd utils@v0.0.0

# init的模块名中必须包含小数点, 可用github.com或自己的域名
go mod init huzhenwei.top/utils
# 这个命令会在当前目录创建一个名为go.mod的文件, 在本文中不会修改它的内容

本地模块golang源码如下:

package utils

import (
    "crypto/rand"
    "encoding/hex"
    "strconv"
    "time"
)

// UnixTimeUniqueID 返回一个"unix时间和n*2长度的唯一码"字符串
func UnixTimeUniqueID(n uint16) string {
    b := make([]byte, n) //8 character
    if _, err := rand.Read(b); err != nil {
        panic(err)
    }

    t := time.Now().Unix()
    return strconv.FormatInt(t, 10) + "-" + hex.EncodeToString(b)
}

调用本地module的方式
例如audio-websocket要调用上述本地module, 需在audio-websocket/go.mod增加如下内容:

# 在go.mod中增加这两条内容就能调用huzhenwei.top/utils这个本地module了
require huzhenwei.top/utils v0.0.0
replace huzhenwei.top/utils v0.0.0 => ../utils@v0.0.0

golang源码中的引用方式如下:

package main

import (
    "path"
    "huzhenwei.top/utils"
)
filePath := path.Join("/data/voices/", utils.UnixTimeUniqueID(4))

注意事项
切换到go mod模式后, 原先基于GOPATH方式的模块引用可能会不正常, 可用如下命令关闭
# 关闭go mod
go env -w GO111MODULE=off
# 开启go mod
#go env -w GO111MODULE=on

引用模块时如果提示verifying module: invalid GOSUMDB: malformed verifier id, 可尝试用如下方法关闭校验:
# 关闭GOSUMDB
go env -w GOSUMDB=""
# 没有问题时建议开启GOSUMDB
go env -w GOSUMDB="sum.golang.org"

posted on   DoubleLi  阅读(2461)  评论(1编辑  收藏  举报
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
历史上的今天:
2019-08-27 使用Debug Diagnostic Tool排除内存泄漏故障
2014-08-27 [Boost]boost的时间和日期处理-(1)日期的操作
2014-08-27 [Boost]boost的时间和日期处理-(2)时间的操作
2013-08-27 c++一些面试题目
2013-08-27 C++类对应的内存结构
2013-08-27 windows窗口分析,父窗口,子窗口,所有者窗口
2013-08-27 mfc窗口,父窗口parentwindow,所有者窗口ownerwindow 区别
点击右上角即可分享
微信分享提示