第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

如何從 Golang 的子目錄正確導(dǎo)入包?

如何從 Golang 的子目錄正確導(dǎo)入包?

Go
慕碼人8056858 2021-12-07 18:54:52
我對(duì) Golang 還很陌生,正在嘗試制作一個(gè)簡(jiǎn)單的 REST api 應(yīng)用程序。最初,一切都很好,因?yàn)槲覍⑺写a都放在main包下的同一目錄中。但是,現(xiàn)在我處于需要開(kāi)始將代碼重構(gòu)為子目錄和包的階段。不幸的是,我未能成功編譯該應(yīng)用程序。我GOPATH的設(shè)置為:~/.workspace 當(dāng)前應(yīng)用程序位于:~/.workspace/src/gitlab.com/myapp/api-auth這是我目前的代碼組織方式:這是我的 main.gopackage mainimport (    "net/http"    "os"    "strings"    "github.com/gorilla/context"    "github.com/justinas/alice"    "gopkg.in/mgo.v2"    "gitlab.com/myapp/api-auth/middlewares")func main() {    privateKey := []byte(strings.Replace(os.Getenv("JWT_KEY"), "\\n", "\n", -1))    conn, err := mgo.Dial(os.Getenv("MONGO_CONN"))    if err != nil {        panic(err)    }    defer conn.Close()    conn.SetMode(mgo.Monotonic, true)    ctx := appContext{        conn.DB(os.Getenv("MONGO_DB")),        privateKey,    }    err = ctx.db.C("users").EnsureIndex(mgo.Index{        Key:        []string{"username"},        Unique:     true,        Background: true,        Sparse:     false,    })    if err != nil {        panic(err)    }    commonHandlers := alice.New(LoggingHandler, context.ClearHandler, RecoveryHandler, AcceptHandler, ContentTypeHandler)    router := NewRouter()    router.Post("/users", commonHandlers.Append(BodyParserHandler(UserResource{})).ThenFunc(ctx.userCreationHandler))    router.Post("/sessions", commonHandlers.Append(BodyParserHandler(UserResource{})).ThenFunc(ctx.sessionCreationHandler))    http.ListenAndServe(":8080", router)}type appContext struct {    db         *mgo.Database    privateKey []byte}這是中間件之一accept.go(其余中間件的構(gòu)造類(lèi)似)package middlewaresimport "net/http"// AcceptHandler ensures proper accept headers in requestsfunc AcceptHandler(next http.Handler) http.Handler {    fn := func(w http.ResponseWriter, r *http.Request) {        if r.Header.Get("Accept") != "application/vnd.api+json" {            writeError(w, errNotAcceptable)            return        }        next.ServeHTTP(w, r)    }    return http.HandlerFunc(fn)}
查看完整描述

1 回答

?
米脂

TA貢獻(xiàn)1836條經(jīng)驗(yàn) 獲得超3個(gè)贊

限定標(biāo)識(shí)符是用包名稱(chēng)前綴限定的標(biāo)識(shí)符。包名和標(biāo)識(shí)符都不能為空。


QualifiedIdent = PackageName "." identifier .

限定標(biāo)識(shí)符訪(fǎng)問(wèn)必須導(dǎo)入的不同包中的標(biāo)識(shí)符。標(biāo)識(shí)符必須在該包的包塊中導(dǎo)出和聲明。


math.Sin  // denotes the Sin function in package math

進(jìn)口申報(bào)


導(dǎo)入聲明聲明包含聲明的源文件取決于導(dǎo)入包的功能(§程序初始化和執(zhí)行),并允許訪(fǎng)問(wèn)該包的導(dǎo)出標(biāo)識(shí)符。導(dǎo)入命名用于訪(fǎng)問(wèn)的標(biāo)識(shí)符 (PackageName) 和指定要導(dǎo)入的包的 ImportPath。


    ImportDecl       = "import" ( ImportSpec | "(" { ImportSpec ";" } ")" ) .

    ImportSpec       = [ "." | PackageName ] ImportPath .

    ImportPath       = string_lit .

PackageName 用于限定標(biāo)識(shí)符以訪(fǎng)問(wèn)導(dǎo)入源文件中包的導(dǎo)出標(biāo)識(shí)符。它在文件塊中聲明。如果省略 PackageName,則默認(rèn)為導(dǎo)入包的包子句中指定的標(biāo)識(shí)符。如果出現(xiàn)顯式句點(diǎn) (.) 而不是名稱(chēng),則在該包的包塊中聲明的所有包的導(dǎo)出標(biāo)識(shí)符將在導(dǎo)入源文件的文件塊中聲明,并且必須在沒(méi)有限定符的情況下訪(fǎng)問(wèn)。


ImportPath 的解釋依賴(lài)于實(shí)現(xiàn),但它通常是已編譯包的完整文件名的子字符串,并且可能與已安裝包的存儲(chǔ)庫(kù)相關(guān)。


實(shí)現(xiàn)限制:編譯器可以將 ImportPaths 限制為僅使用屬于 Unicode 的 L、M、N、P 和 S 通用類(lèi)別(沒(méi)有空格的圖形字符)的字符的非空字符串,也可以排除字符 !"#$%& '()*,:;<=>?[]^`{|} 和 Unicode 替換字符 U+FFFD。


假設(shè)我們編譯了一個(gè)包含 package 子句 package math 的包,它導(dǎo)出函數(shù) Sin,并將編譯后的包安裝在“l(fā)ib/math”標(biāo)識(shí)的文件中。此表說(shuō)明了在各種類(lèi)型的導(dǎo)入聲明之后如何在導(dǎo)入包的文件中訪(fǎng)問(wèn) Sin。


    Import declaration          Local name of Sin


    import   "lib/math"         math.Sin

    import m "lib/math"         m.Sin

    import . "lib/math"         Sin

導(dǎo)入聲明聲明了導(dǎo)入包和導(dǎo)入包之間的依賴(lài)關(guān)系。一個(gè)包直接或間接地導(dǎo)入自己,或者直接導(dǎo)入一個(gè)包而不引用它的任何導(dǎo)出標(biāo)識(shí)符都是非法的。要僅為其副作用(初始化)導(dǎo)入包,請(qǐng)使用空白標(biāo)識(shí)符作為顯式包名稱(chēng):


    import _ "lib/math"

錯(cuò)誤


./main.go:11: imported and not used: "gitlab.com/myapp/api-auth/middlewares"

說(shuō)你沒(méi)有使用 package middlewaresin package main,這是真的。


錯(cuò)誤


./main.go:42: undefined: AcceptHandler

說(shuō)你沒(méi)有AcceptHandler在 package 中定義main,這是真的。


“限定標(biāo)識(shí)符是用包名稱(chēng)前綴限定的標(biāo)識(shí)符。限定標(biāo)識(shí)符訪(fǎng)問(wèn)必須導(dǎo)入的不同包中的標(biāo)識(shí)符。”


例如,在 package 中main,使用限定標(biāo)識(shí)符middlewares.AcceptHandler,這是 import 的一種用法"gitlab.com/myapp/api-auth/middlewares"。


查看完整回答
反對(duì) 回復(fù) 2021-12-07
  • 1 回答
  • 0 關(guān)注
  • 385 瀏覽
慕課專(zhuān)欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)