【发布时间】:2017-12-02 23:10:32
【问题描述】:
我的问题
如果问题微不足道,我深表歉意 - 我对 golang 还很陌生,想了解导入机制。我使用 OSX 和简单的 go 程序编译和运行良好。
我在swagger editor 中使用automatic code generator 生成了一个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))
}
正如 cmets 所期望的那样,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 packages
- 试图了解一些github项目中的包/导入关系
- 将目录树移至
$GOPATH/src,并将导入更改为sw "sw/go-server-server/go",仍为main.go:13:2: go/default.go:3:1: expected 'IDENT', found 'import'
sw 导入的完全限定导入路径应该是什么,它的含义是什么?
【问题讨论】:
-
永远不要尝试使用相对导入路径(除了一次性示例)。导入很简单,就是从
$GOPATH/src/到模块的路径 -
那我该怎么办?复制文件夹
$GOPATH/src/? -
该错误看起来像您在名为 default.go 的 go 目录中有一个文件存在语法错误。
-
@reedobrien 谢谢,添加了文件的内容。是缺少包名的问题吗?它与目录名称有关吗? golang.org/doc/code.html#PackageNames
-
通常使用文件所在目录的名称作为包的名称。但是使用
package go似乎很混乱。main是一个特殊的包名,用来表示包中有一个 main 函数被编译成可执行的二进制文件。
标签: go import swagger swagger-codegen