go - 在另一个文件夹中导入本地包

标签 go

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

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

文件夹结构:

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

$GO路径

/Users/myusername/go

主.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 方法未导出 [在 validate/args.go 中]。也就是说,它只能在同一个包内使用,不能在其他包内使用
    要导出,只需将方法CheckEnv 的第一个字母大写。现在可以从其他包中使用 CheckEnv

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

关于go - 在另一个文件夹中导入本地包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50382851/

相关文章:

go - 在 Jenkins 中构建的路径名不正确

go - 如何使用 Golang 自定义扫描器字符串文字和扩展内存将整个文件加载到内存中?

smtp - 调试 SMTP 连接

go - channel 数组的范围

google-app-engine - 来自 Google App Engine 的 Google Cloud SQL(第二代)出现 "TLS requested but server does not support TLS"错误?

go - 找不到包 "google/protobuf"

docker - 去构建 docker : unexpected binary in/go/bin

go - 为什么 channel 不起作用?

go - 如何正确写入 `Read` 和 `Write` `net.Pipe()`

json - Unmarshal 中的动态类型