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



资料夹结构:

├── 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)
    }

}

validate/args.go
package validate

import "strings"

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

我的项目在$ GOPATH的src目录中。如果这不是进行代码拆分的正确方法,是否应遵循通常使用的约定?

任何反馈表示赞赏。

最佳答案

这里有两个问题。

  • 不会在[validate/args.go]中导出checkEnv方法。也就是说,它仅在同一个包中可用,而在其他包中不可用。要导出,只需将方法CheckEnv的首字母大写。现在可以从其他软件包
  • 中使用CheckEnv
  • 从其他程序包调用方法时,语法应为packagename.ExportedMethod(params...)。所以在您的代码[main.go]中,应该为result := validate.CheckEnv(c.Args().Get(0))
  • 08-07 11:41