Go 自动生成代码中的完全限定导入路径 我的问题
如果问题很小,我深表歉意-我对golang相当陌生,希望了解导入机制。我使用OSX和简单的go程序编译并运行良好 我已经在中使用生成了一个golang服务器。我已将代码解压缩到Go 自动生成代码中的完全限定导入路径 我的问题,go,import,swagger,swagger-codegen,Go,Import,Swagger,Swagger Codegen,如果问题很小,我深表歉意-我对golang相当陌生,希望了解导入机制。我使用OSX和简单的go程序编译并运行良好 我已经在中使用生成了一个golang服务器。我已将代码解压缩到/tmp/中的某个目录中,生成的服务器包含以下main.go文件: 主程序包 进口( //警告! //将此更改为完全限定的导入路径 //将此文件放入项目后。 //比如说,, // //sw“github.com/myname/myrepo/go” // sw.“/开始” “日志” “net/http” ) func mai
/tmp/
中的某个目录中,生成的服务器包含以下main.go
文件:
主程序包
进口(
//警告!
//将此更改为完全限定的导入路径
//将此文件放入项目后。
//比如说,,
//
//sw“github.com/myname/myrepo/go”
//
sw.“/开始”
“日志”
“net/http”
)
func main(){
log.Printf(“服务器已启动”)
路由器:=sw.NewRouter()
log.Fatal(http.ListenAndServe(“:8080”,路由器))
}
从注释中可以看出,go build main.go
失败,出现以下错误:
main.go:11:2:
go/default.go:3:1: expected 'IDENT', found 'import'
法医学
项目的目录树
go/default.go
我试过什么
- 了解
- 试图理解某些github项目中的包/导入关系
- 将目录树移动到
,并将导入更改为$GOPATH/src
,它仍然提供sw“sw/go-server-server/go”
main.go:13:2: go/default.go:3:1:应为“IDENT”,找到“import”
导入的
sw
的完全限定导入路径应该是什么,它意味着什么?您需要将一些路径导出为GOPATH
,比如$HOME/go
。
export GOPATH=$HOME/go
然后你可以把你的项目放在
$GOPATH/src/go服务器
($HOME/go/src/go服务器
)中,如果我读对了所有内容,你的完全限定路径将是go服务器/go
。以下操作成功:
- 向go文件夹中的所有.go文件添加包名(我使用了
)blah
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:找不到包“github.com/gorilla/mux”
错误,go获取“github.com/gorilla/mux”
切勿尝试使用相对导入路径(一次性示例除外)。导入非常简单,它只是从$GOPATH/src/
到模块的路径,所以我应该怎么做?将文件夹复制到$GOPATH/src/
?错误看起来像是go目录中名为default.go的文件有语法错误。@reedobrien谢谢,添加了该文件的内容。这是一个缺少包名的问题吗?它与目录名有关吗?通常使用文件所在目录的名称作为包的名称。然而,使用包go
似乎非常令人困惑main
是一个特殊的包名,用于指示包中有一个编译成可执行二进制文件的主函数。您能详细说明“添加包名”的含义吗?@JHowIX我编辑了答案,以显示什么对我有效。我想他的意思是给go文件夹中的所有.go文件添加一个包名。router.go、logger.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)
}
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),
)
})
}