• go mod模式下引用本地包/模块(module)的方法


    文章目录
    样例目录结构
    建立本地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"

  • 相关阅读:
    一个比较日期大小的javascript函数
    导出Excel(利用xml标记)
    Oracle 数据库的备份与恢复
    总是浮在页面底部的广告DIV
    实用批处理文件 (IP设置.bat, 清理系统垃圾.bat, atc.)
    【转:来源不详】几家IT公司面试全揭秘
    二级联动(javascript Array)
    JS实现定时循环上翻
    ORACLE函数大全 [转]
    C#中Timer类与线程
  • 原文地址:https://www.cnblogs.com/lidabo/p/15193064.html
Copyright © 2020-2023  润新知