【问题标题】:Importing local package in another folder在另一个文件夹中导入本地包
【发布时间】:2018-05-17 03:19:29
【问题描述】:

我不断收到以下错误,我一直在尝试其他 Stack Overflow 线程中的一些其他建议。

./main.go:15:13: undefined: checkEnv

文件夹结构:

├── README.md
├── main.go
└── validate
    └── args.go

$GOPATH

/Users/myusername/go

main.go

package main

import (
    "fmt"
    "log"
    "os"

    "projectName/validate"

    "gopkg.in/urfave/cli.v1"
)

func main() {
    app := cli.NewApp()
    app.Name = "thirsty"
    app.Action = func(c *cli.Context) error {
        result := checkEnv(c.Args().Get(0))

        fmt.Println(result)
        return nil
    }
    err := app.Run(os.Args)

    if err != nil {
        log.Fatal(err)
    }

}

验证/args.go

package validate

import "strings"

func checkEnv(environment string) bool {
    env := strings.ToLower(environment)
    return env != "qa" && env != "dev"
}

我的项目位于我的 $GOPATH 的 src 目录中。如果这不是进行代码拆分的正确方法,是否有一个普遍使用的约定可以遵循?

感谢任何反馈。

【问题讨论】:

  • 1. checkEnv 未导出。 2. 坚持如何逐字编写 Go 代码。

标签: go


【解决方案1】:

这里有两个问题。

  1. checkEnv 方法未导出 [in validate/args.go]。即它只能在同一个包内使用,不能在其他包内使用
    要导出,只需将方法CheckEnv 的第一个字母大写即可。现在CheckEnv可以从其他包中使用

  2. 从其他包调用方法时,语法应为packagename.ExportedMethod(params...)
    所以在您的代码 [in main.go] 中应该是 result := validate.CheckEnv(c.Args().Get(0))

【讨论】:

    猜你喜欢
    • 2018-10-30
    • 1970-01-01
    • 1970-01-01
    • 2017-01-13
    • 2013-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多