Go项目结构的问题

zbq4xfa0  于 2022-12-25  发布在  Go
关注(0)|答案(1)|浏览(124)

我有一个项目,我想构建多个访问相同逻辑(来自相同包)的二进制文件。
我的文件夹结构如下所示

.
├── app
│   ├── bin_a
│   │   └── bin_a.go
│   ├── bin_b
│   │   └── bin_b.go
├── pkg
│   ├── model.go
└── go.mod

go.mod

module github.com/user/module
go 1.19

bin_a.开始

package main

import("github.com/user/module/pkg/model")

func main() {
    user := User{}
}

model.go

package main

type User struct { }

如果我尝试构建bin_a(例如go build app/bin_a/bin_a.go),则会收到以下错误消息

no required module provides package github.com/user/module/pkg/model; to add it:
        go get github.com/user/module/pkg/model
package command-line-arguments: cannot find package

这很奇怪,因为它是同一个包!我还确保了gopath中有一个符号链接,例如/home/user/go/github.com/user/module/app/到我的存储库
我该怎么解决这个问题?

jdzmm42g

jdzmm42g1#

首先,你没有pkg/model包,在bin_a/bin_a.go文件中你正确地命名了你的包,但是我认为你应该在bin_a/和bin_b/文件夹下命名你的文件main.go,这些仍然是主要的入口点。
其次,文件夹名应该是包名,你应该在pkg/下创建一个model/文件夹,并在model中设置包名,转到package model,或者当你把这个放在pkg/文件夹下时,再使用package pkg
在bin_a/bin_a.go中,您应该使用以下导入路径:import "github.com/user/module/pkg"或与我的建议import "github.com/user/module/pkg/model"
因此,文件夹结构将为:

.
├── app
│   ├── bin_a
│   │   └── main.go
│   ├── bin_b
│   │   └── main.go
├── pkg
│   ├── model
│   │   └── user.go
└── go.mod

代码:

/////////////////////////////////
// bin_a/main.go

package main

import("github.com/user/module/pkg/model")

func main() {
    user := User{}
}

//////////////////////////////////////////
// model.go
package model

type User struct { }

您应该检查这些文档:

相关问题