【问题标题】:Multimodule Go Importing From Wrong Path多模块从错误的路径导入
【发布时间】:2021-06-25 02:26:29
【问题描述】:

我有以下结构:

gateway-service
  config
    config.go
  go.mod
  go.sum
  service.go
logger
  logger.go
  go.mod
  go.sum

config.go 我导入以下内容:


import (
    "errors"
    "os"
    "strings"

    "github.com/spf13/viper"
)

现在,顶级包很好并且可以正确导入。但是,viper 包没有。错误信息是:

could not import github.com/spf13/viper (cannot find package "github.com/spf13/viper" in any of 
    /Users/me/.go/src/github.com/spf13/viper (from $GOROOT)
    /Users/me/go/src/github.com/spf13/viper (from $GOPATH))compiler

logger.go 文件中也会出现同样的问题:

package logger

import (
    "context"

    "go.uber.org/zap"
)

错误是:

could not import go.uber.org/zap (cannot find package "go.uber.org/zap" in any of 
    /Users/me/.go/src/go.uber.org/zap (from $GOROOT)
    /Users/me/go/src/go.uber.org/zap (from $GOPATH))compiler

我试过安装:

go get github.com/spf13/viper
go get go.uber.org/zap
go mod tidy

网关服务/go.mod

module github.com/puul/gateway-service

go 1.15

require github.com/spf13/viper v1.3.2

logger/go.mod

module github.com/puul/logger

go 1.15

require (
    go.uber.org/multierr v1.6.0 // indirect
    go.uber.org/zap v1.16.0
)

去环境:

▶ echo $GOPATH
/Users/me/go

▶ echo $GOROOT
/Users/me/.go

在相关说明中,我很想知道是否有更简单的方法来实现这样的结构:

pkg
  logger
    logger.go
services
  gateway

编辑

我的猜测是模块和 GOPATH 之间存在某种冲突。坦率地说,从文档中不清楚这两者是如何相互作用的。结果,自动导入在 VSCode 中似乎被破坏了。它应该从导入中给出的路径中提取,但事实并非如此。决定导入路径是核心问题。

【问题讨论】:

  • 您尝试过“运行/构建”吗?我怀疑 VSCode 可能正在使用不同的“go”二进制文件或 GOPATH
  • 在记录器中构建工作但在网关服务中失败cannot find module providing package github.com/puul/logger@aclowkay
  • 对于此类问题,将go versiongo env 的输出发布在您观察到错误的同一目录中会有所帮助。 (另请注意,go 命令从其工作目录推断当前模块,因此您在哪个目录中运行命令真的很重要。)

标签: go go-modules


【解决方案1】:

错误消息中的(from $GOPATH) 字符串表明产生该错误的go 命令调用在GOPATH 模式下运行,而不是在模块模式下运行——这可能意味着您当前的工作目录不在任何一个两个模块。

一般来说,我们建议您对代码使用单个模块,除非您强烈需要在不同时间发布不同的包集。

如果你使用 VSCode 跨多个模块编辑代码,你可能需要配置你的工作区来告诉它哪个是主模块;查看build.experimentalWorkspaceModule 设置。

您可能还需要(或想要)使用replace directivelogger 模块插入gateway-service 模块。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-09-21
    • 2011-07-06
    • 1970-01-01
    • 2016-05-17
    • 1970-01-01
    • 2017-06-26
    • 2020-06-05
    相关资源
    最近更新 更多