showliuzp 2025-10-28 11:17 采纳率: 84.3%
浏览 5
已结题

golang添加子模块引用后go mod tidy卡住


//代码是私有库,通过oauth配置,git可以拉下代码。

//++++++++++++++++++历史问题:

 
引入文件:
im_client "gitlab.sludev.shop/golang/client/im_client"
 
go mod tidy报错:
go: x_dream_guild/services imports
        gitlab.sludev.shop/golang/client/im_client: module gitlab.sludev.shop/golang/client/im_client: git ls-remote -q origin in /home/x/.cache/go-mod/cache/vcs/424c2f9446a5e0ba57bef19ac5af0e43119285e8f80ee29a741abc0228a0a6f2: exit status 128:
        remote: The project you were looking for could not be found or you don't have permission to view it.
        fatal: repository 'http://oauth2:x@gitlab.sludev.shop/golang/client.git/' not found
 
gitlab仓库:
gitlab.sludev.shop/golang/client/im_client.git
我明明是用的gitlab.sludev.shop/golang/client/im_client.git的代码,但报错确实gitlab.sludev.shop/golang/client.git,是不是go mod里需要设置引用子模块?

+++++++++++++++++++++++++++++++++++++修正如下:

修改后go mod代码:

require im_client v0.0.1

replace im_client => gitlab.sludev.shop/golang/client/im_client.git v0.0.1

代码引用:
不再引用 im_client "gitlab.sludev.shop/golang/client/im_client"

go clean -modcache
go mod tidy
卡住不动

排除了不是网络的原因,估计还是哪里不对,有能解决的么
  • 写回答

4条回答 默认 最新

  • 宝码香车 优质创作者: JavaScript技术领域 2025-10-28 11:52
    关注

    让【宝码香车】来帮您解答,本回答参考DeepSeek编写,并整理提供。

    如果答案让您满意,请采纳、点赞、关注,非常感谢!
    .
    每日一句正能量,让它带给您好心情:真正的快乐,源于内心的满足和对生活的热爱。
    .

    根据你的描述,这是一个典型的 Go 模块子模块引用问题。问题在于 Go modules 对子模块路径的处理方式。

    问题分析

    1. 路径解析问题:Go modules 会将 gitlab.sludev.shop/golang/client/im_client 解析为仓库根路径 gitlab.sludev.shop/golang/client.git
    2. replace 指令问题:你的 replace 指令格式不正确

    解决方案

    方案1:使用正确的 replace 语法

    module your-module-name
    
    
    go 1.19
    
    
    require (
        im_client v0.0.0
    )
    
    
    replace im_client => gitlab.sludev.shop/golang/client/im_client.git v0.0.0
    

    方案2:直接使用完整路径(推荐)

    module your-module-name
    
    
    go 1.19
    
    
    require (
        gitlab.sludev.shop/golang/client/im_client v0.0.0
    )
    

    然后在代码中直接导入:

    import "gitlab.sludev.shop/golang/client/im_client"
    

    方案3:如果确实是子模块,配置 git

    在私有仓库情况下,需要配置 git 来正确处理子模块:

    # 配置 git 使用 ssh 而不是 http
    git config --global url."git@gitlab.sludev.shop:".insteadOf "https://gitlab.sludev.shop/"
    
    
    # 或者配置认证
    git config --global http.extraheader "PRIVATE-TOKEN: your-token"
    

    方案4:检查网络和认证配置

    确保你的 git 配置正确:

    # 检查 git 配置
    git config --list | grep gitlab
    
    
    # 测试能否克隆仓库
    git clone https://gitlab.sludev.shop/golang/client/im_client.git
    

    方案5:强制刷新并设置超时

    # 清理缓存
    go clean -modcache
    
    
    # 设置超时和详细输出
    GOPROXY=direct GOSUMDB=off go mod tidy -v
    
    
    # 或者使用 timeout 命令(Linux/Mac)
    timeout 30s go mod tidy
    

    诊断步骤

    1. 检查当前模块配置
    go mod edit -json
    
    1. 查看详细错误信息
    GOPROXY=direct GOSUMDB=off go mod tidy -v
    
    1. 检查 git 认证
    git ls-remote https://gitlab.sludev.shop/golang/client/im_client.git
    

    最终建议

    最可能的问题是 replace 指令的格式问题。建议:

    1. 使用方案2的直接路径引用
    2. 确保你的 git 认证配置正确
    3. 如果仍然卡住,检查网络代理或防火墙设置

    如果问题持续,可以提供 go mod tidy -v 的详细输出,这样可以更准确地定位问题所在。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 11月5日
  • 已采纳回答 10月28日
  • 创建了问题 10月28日