为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 go-lang 中导入包或如何正确构建包结构?

如何在 go-lang 中导入包或如何正确构建包结构?

Go
慕斯709654 2022-07-18 16:43:45
我在这里有以下文件夹结构   server       -main.go     -cmd         -config           -config.go               -handlerr.go        -handlers           -handlers.go              -pkg          -models                  -models.go             -db                    -db.go     -router           -router.go当我尝试将“模型包”导入 db 包时,它说“无效的导入路径:...”,这个结构我正在跟随书,所以我做错了什么?如何将模型导入 db功能还是我应该替换它们(数据库和模型),有什么建议吗?
查看完整描述

2 回答

?
HUH函数

TA贡献1836条经验 获得超4个赞

以下是填写的问题中的文件。说明了从 db 到模型的导入。我将模块名称设置为“my.example”。更改该名称以满足您的需求。最好选择包括“。”的内容。以避免与标准包冲突。您可以在 Go PlayGround 上运行此代码。如何编写 Go 代码详细解释了所有这些内容。


-- main.go --


package main


import (

    "my.example/pkg/models/db"

)


func main() {

    db.Hello()

}

-- go.mod --


module my.example

-- cmd/config/config.go --


package config

-- cmd/config/handlerr.go --


package config

-- handlers/handlers.go --


package handlers

-- pkg/models/models.go --


package models


func Hello() string { return "hello from models" }

-- pkg/models/db/db.go --


package db


import (

    "fmt"


    "my.example/pkg/models"

)


func Hello() {

    fmt.Println("hello from db and", models.Hello())

}

-- pkg/router/router.go --


package router

关于文件的布局:这是在意见的土地上,所以我只是问你一个问题。pkg和中的额外嵌套级别会给cmd您带来什么好处吗?


查看完整回答
反对 回复 2022-07-18
?
料青山看我应如是

TA贡献1772条经验 获得超8个赞

 正如@maxm 提醒我的那样,使用GOPATH,这是他提到的一个很好的例子。


所以,如果我的网络搜索和一个小示例程序是正确的,这几乎就是这里发生的事情。


Golang 将本地包视为带有 .go 文件的文件夹,/modules/module.go如果modules.go在package modules第一行有的话。


所以,当我们包含一个本地包时,我们实际上是包含一个文件夹。我创建了一个小例子:


/project

      main.go

      /modules

          modules.go

          /printer

              printer.go

main.go


package main


import (

    "./modules/printer"

)


func main() {

    printer.Print()

}

模块/modules.go


package modules


import (

    "fmt"

)


func Modules() {

    fmt.Println("Modules Package")

}

模块/打印机/printer.go


package printer


import (

    "../../modules"

)


func Print() {

    modules.Modules()

}

这确实有效!所以,你可以导入一个父模块,你只需要包含文件夹。


当然,我们不能有导入周期,Golang 不允许,如果你有这种错误,最好改变你的程序结构。


我不是在谈论路径和东西,这只是一个实用的解决方案。所以,聪明的人,请纠正我!


查看完整回答
反对 回复 2022-07-18
  • 2 回答
  • 0 关注
  • 105 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信