Go 自动生成代码中的完全限定导入路径 我的问题

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

如果问题很小,我深表歉意-我对golang相当陌生,希望了解导入机制。我使用OSX和简单的go程序编译并运行良好

我已经在中使用生成了一个golang服务器。我已将代码解压缩到
/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),
        )
    })
}