【问题标题】:Import func from subfolder从子文件夹导入函数
【发布时间】:2021-03-21 07:17:58
【问题描述】:

我正在尝试从子文件夹中导入 func。

我有一个主包

package main

import (
    ...
)

func handleRequests() {
    http.HandleFunc("/health", health)
    ...
}

func main() {
    handleRequests()
}

然后我有一个名为 health 的文件夹,其中有一个名为 health.go 的文件。

package health

import (
    ...
)

func health(writer http.ResponseWriter, _ *http.Request) {
    ...
}

我的import 应该是什么样子?如何调用我的健康功能?

【问题讨论】:

  • 如果您使用模块,您的导入路径应该类似于 modname/health,尽管通常将子包放在名为 pkginternal 的子文件夹中,如果您这样做,您的路径更改为 modname/pkg/health 。请注意,您的函数运行状况应以要导出的大写字母开头
  • @PabloFlores "虽然如果你这样做,通常会将子包放在名为 pkginternal 的子文件夹中" -- 请注意,虽然这些可能是常见它们不是官方推荐。 internal 包/子文件夹有特殊用途,不应用于除此目的之外的任何用途。 pkg 包/子文件夹在野外使用时,建议反对,AFAIK。
  • @user672009 你可能会从阅读How to Write Go Code 中受益。

标签: go


【解决方案1】:

此时,您的导入语句没有任何意义,因为它health 包没有导出函数或变量。您应该从语言规范中查看 Go 中的范围。 From here

也许可以考虑查看go modules,因为它现在是处理任何包含多个文件的 go 程序的建议方法。

快速回答是,

你的健康.go

package health

import (
    ...
)

func Handler(writer http.ResponseWriter, _ *http.Request) {
    ...
}

你的 main.go

package main

import (
    github.com/blablabla/yourproject/health
)

func handleRequests() {
    http.HandleFunc("/health", health.Handler)
    ...
}

func main() {
    handleRequests()
}

【讨论】:

    【解决方案2】:

    您必须从大写符号开始命名函数(“Health”而不是“health”)。

    例如:health(你的情况)是私人声明,而 Health 是公开的。

    类型和变量命名原则相同。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-02-19
      • 2012-02-15
      • 1970-01-01
      • 1970-01-01
      • 2020-01-24
      • 1970-01-01
      • 2012-12-13
      相关资源
      最近更新 更多