Golang Gorilla Mux服务器本地包导入并未使用问题

Cli*_*iff 0 go gorilla

我正在使用Gorilla Mux测试一个简单的服务器应用程序.运行应用程序时,我一直收到未定义的错误.这是应用程序的结构

src/ptest/
??? app
?   ??? app.go
??? main.go
Run Code Online (Sandbox Code Playgroud)

main.go

package main

import (
    "fmt"
    "ptest/app"
)

func main() {
    fmt.Println("Hello Testing App")
    app := App{}
}
Run Code Online (Sandbox Code Playgroud)

app.go

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))
}
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,我有一个通过导入来main初始化appptest/app.但是当我go run *go:我收到错误:

# command-line-arguments
./main.go:5:2: imported and not used: "ptest/app"
./main.go:10:9: undefined: App
Run Code Online (Sandbox Code Playgroud)

这是我的go env.我想知道我的环境是否不对劲?

GOARCH="amd64"
GOBIN=""
GOCACHE="/Users/haha/Library/Caches/go-build"
GOEXE=""
GOHOSTARCH="amd64"
GOHOSTOS="darwin"
GOOS="darwin"
GOPATH="/Users/haha/go"
GORACE=""
GOROOT="/usr/local/go"
GOTMPDIR=""
GOTOOLDIR="/usr/local/go/pkg/tool/darwin_amd64"
GCCGO="gccgo"
CC="clang"
CXX="clang++"
CGO_ENABLED="1"
CGO_CFLAGS="-g -O2"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-g -O2"
CGO_FFLAGS="-g -O2"
CGO_LDFLAGS="-g -O2"
PKG_CONFIG="pkg-config"
Run Code Online (Sandbox Code Playgroud)

Him*_*shu 5

App{}按包名使用struct.您正在导入包但不使用它.Appstruct在app包中声明.这就是错误的原因.

# command-line-arguments
./main.go:5:2: imported and not used: "ptest/app"
./main.go:10:9: undefined: App
Run Code Online (Sandbox Code Playgroud)

在你的程序中,你试图初始化一个App{}不存在的main.go.

package main

import (
    "fmt"
    "ptest/app"
)

func main() {
    fmt.Println("Hello Testing App")
    app := app.App{}
}
Run Code Online (Sandbox Code Playgroud)

在Golang Spec中对合格标识符进行了详细描述:

限定标识符是使用包名称前缀限定的标识符.包名称和标识符都不能为空.

QualifiedIdent = PackageName "." identifier .
Run Code Online (Sandbox Code Playgroud)

限定标识符访问必须导入的不同包中的标识符.必须在该包的包块中导出和声明标识符.

math.Sin    // denotes the Sin function in package math
Run Code Online (Sandbox Code Playgroud)