2

我的问题

如果问题微不足道,我深表歉意 - 我对 golang 还很陌生,想了解导入机制。我使用 OSX 和简单的 go 程序编译和运行良好。

我在swagger 编辑器中使用自动代码生成器生成了一个 golang 服务器。我已将代码解压缩到 中的某个目录中,生成的服务器包含以下文件:/tmp/main.go

package main

import (
        // WARNING!
        // Change this to a fully-qualified import path
        // once you place this file into your project.
        // For example,
        //
        //    sw "github.com/myname/myrepo/go"
        //
        sw "./go"
        "log"
        "net/http"
)

func main() {
        log.Printf("Server started")

        router := sw.NewRouter()

        log.Fatal(http.ListenAndServe(":8080", router))
}

正如评论所预期的那样,go build main.go失败并出现以下错误:

main.go:11:2:
go/default.go:3:1: expected 'IDENT', found 'import'

取证

项目目录树

/tmp/goserver/go-server-server
├── LICENSE
├── api
│   └── swagger.yaml
├── go
│   ├── README.md
│   ├── app.yaml
│   ├── default.go
│   ├── logger.go
│   └── routers.go
└── main.go

go/default.go

package

import (
    "net/http"
)

type Default struct {

}

func QuestionimagePost(w http.ResponseWriter, r *http.Request) {
        w.Header().Set("Content-Type", "application/json; charset=UTF-8")
        w.WriteHeader(http.StatusOK)
}

我试过什么

  • 阅读有关go 包的信息
  • 试图了解一些github项目中的包/导入关系
  • 将目录树移至$GOPATH/src,并将导入更改为sw "sw/go-server-server/go",这仍然给出main.go:13:2: go/default.go:3:1: expected 'IDENT', found 'import'

导入的全限定导入路径应该是sw什么,是什么意思?

4

2 回答 2

2

以下是诀窍:

  • 为 go 文件夹中的所有 .go 文件添加包名(我用过blah

例如。在 go/routers.go 中

package blah

import (
    "log"
    "net/http"
    "time"
)

func Logger(inner http.Handler, name string) http.Handler {
    return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
        start := time.Now()

        inner.ServeHTTP(w, r)

        log.Printf(
            "%s %s %s %s",
            r.Method,
            r.RequestURI,
            name,
            time.Since(start),
        )
    })
}

做同样go/logger.go的事情,在你的情况下,default.go

  • 出现go/routers.go:7:2: cannot find package "github.com/gorilla/mux"错误后,go get 'github.com/gorilla/mux'
于 2016-09-23T19:24:46.717 回答
1

您需要将一些路径导出GOPATH$HOME/go. export GOPATH=$HOME/go.

然后,您可以将您的项目放入$GOPATH/src/go-server-server( ) 中,如果我正确阅读所有内容$HOME/go/src/go-server-server,您的完全合格路径将是。go-server-server/go

于 2016-09-23T18:54:38.793 回答