-2

我在这里有以下文件夹结构

   server
       -main.go
     -cmd
         -config
           -config.go    
           -handlerr.go   
     -handlers
           -handlers.go         
     -pkg 
         -models       
           -models.go  
           -db       
             -db.go
     -router
           -router.go

当我尝试将“模型包”导入 db 包时,它说“无效的导入路径:...”,这个结构我正在跟随书,所以我做错了什么?如何将模型导入 db功能还是我应该替换它们(数据库和模型),有什么建议吗? 在此处输入图像描述

4

2 回答 2

2

以下是填写的问题中的文件。说明了从 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您带来什么好处吗?

于 2020-12-09T03:27:18.267 回答
-2

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

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

Golang 将本地包视为带有 .go 文件的文件夹,/modules/module.go如果modules.gopackage 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 不允许,如果你有这种错误,最好改变你的程序结构。

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

于 2020-12-09T02:24:00.720 回答