【问题标题】:How to embed go.mod & go.sum in go 1.16如何在 go 1.16 中嵌入 go.mod 和 go.sum
【发布时间】:2021-08-26 00:15:15
【问题描述】:

我想在父模块中嵌入一个子模块目录,但是golang提醒我pattern tpl/api_new/*: cannot embed file tpl/api_new/README.md: in different module

我知道我可以删除 go.mod & go.sum 然后在生成新项目时运行“go mod init && go get -u”。

底部是文件树和嵌入变量,我可以做些什么来嵌入 go.mod 和 go.sum 吗? 谢谢~

//go:embed tpl/api_new/*
var apiNew embed.FS
├─api_new
│  │  .editorconfig
│  │  .gitignore
│  │  generate.go
│  │  go.mod
│  │  go.sum
│  │  makefile
│  │  README.md
│  │
│  ├─cmd
│  │  └─app
│  │          main.go
│  │
│  ├─config
│  │      config-dev.toml
│  │      config-live.toml
│  │      config-local.toml
│  │      config-prod.toml
│  │      config-stress.toml
│  │      config-trunk.toml
│  │
│  └─internal
│      └─app
│          ├─http
│          │  │  server.go
│          │  │
│          │  └─example
│          │          hello.go
│          │
│          ├─lib
│          │  ├─err
│          │  │      codecommon.go
│          │  │      err.go
│          │  │
│          │  ├─pms
│          │  │      init.go
│          │  │
│          │  └─util
│          │          md5.go
│          │          url.go
│          │
│          ├─model
│          │  │  init.go
│          │  │
│          │  ├─grpc
│          │  │  ├─roomaggregation
│          │  │  │      aggregation.proto
│          │  │  │      base.go
│          │  │  │
│          │  │  ├─roombase
│          │  │  │      base.proto
│          │  │  │      roombase.go
│          │  │  │
│          │  │  └─roomlist
│          │  │          base.proto
│          │  │          icon.go
│          │  │
│          │  ├─hrpc
│          │  │  │  init.go
│          │  │  │
│          │  │  └─efs
│          │  │          efs.go
│          │  │          init.go
│          │  │          option.go
│          │  │
│          │  └─redis
│          │      ├─attachInfo
│          │      │      index.go
│          │      │
│          │      ├─outing
│          │      │      index.go
│          │      │
│          │      ├─roomcity
│          │      │      roomcity.go
│          │      │
│          │      └─roomjump
│          │              index.go
│          │
│          └─service
│              │  init.go
│              │
│              └─example
│                      hello.go

【问题讨论】:

  • 您只想嵌入 go.mod 文件吗?还是要嵌入整棵树?

标签: go embed go-modules


【解决方案1】:

存储库中的每个模块都单独存储在module cache 中。按照设计,子目录中存在go.mod 文件会导致整个子树从外部模块中完全删除。

如果您确实需要父目录中的模块可以访问 tpl/api_new 中的各个文件,那么您可以:

  1. 删除内部的go.modgo.sum 文件以将源文件全部放在同一个模块中,或者
  2. …/tpl/api_new 模块(可能是internal package)中的某个包中导出embed.FS 数据,并在父目录模块中导出import 该包,以便以编程方式访问该数据。

【讨论】:

    【解决方案2】:

    我还能做些什么来嵌入 go.mod 和 go.sum 吗?

    没有。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-07
      相关资源
      最近更新 更多