我正在使用Gorilla Mux测试一个简单的服务器应用程序。运行应用程序时,我一直收到未定义的错误。这是应用程序的结构
MAX(ordnr)
main.go
src/ptest/
├── app
│ └── app.go
└── main.go
app.go
package main
import (
"fmt"
"ptest/app"
)
func main() {
fmt.Println("Hello Testing App")
app := App{}
}
正如您所看到的,我有package app
import (
"fmt"
"log"
"net/http"
"github.com/gorilla/mux"
)
type App struct {
Router *mux.Router
}
func (A *App) Run() {
fmt.Println("Listening at :8080")
log.Fatal(http.ListenAndServe(":8080", A.Router))
}
通过从main
导入来初始化app
。但是当我ptest/app
:
go run *go
这是我的# command-line-arguments
./main.go:5:2: imported and not used: "ptest/app"
./main.go:10:9: undefined: App
。我想知道我的环境是否不对劲?
go env
答案 0 :(得分:5)
按包名使用App{}
结构。您正在导入包但不使用它。 App
结构在app
包中声明。这就是错误的原因。
# command-line-arguments
./main.go:5:2: imported and not used: "ptest/app"
./main.go:10:9: undefined: App
在您的计划中,您尝试初始化App{}
中不存在的main.go
。
package main
import (
"fmt"
"ptest/app"
)
func main() {
fmt.Println("Hello Testing App")
app := app.App{}
}
在Golang Spec中对Qualified Identifiers:
进行了详细描述限定标识符是使用包名限定的标识符 字首。包名称和标识符都不能为空。
QualifiedIdent = PackageName "." identifier .
合格标识符访问不同包中的标识符, 必须导入。必须导出和声明标识符 在该软件包的软件包块中。
math.Sin // denotes the Sin function in package math