1 回答

TA貢獻1836條經驗 獲得超3個贊
限定標識符是用包名稱前綴限定的標識符。包名和標識符都不能為空。
QualifiedIdent = PackageName "." identifier .
限定標識符訪問必須導入的不同包中的標識符。標識符必須在該包的包塊中導出和聲明。
math.Sin // denotes the Sin function in package math
進口申報
導入聲明聲明包含聲明的源文件取決于導入包的功能(§程序初始化和執行),并允許訪問該包的導出標識符。導入命名用于訪問的標識符 (PackageName) 和指定要導入的包的 ImportPath。
ImportDecl = "import" ( ImportSpec | "(" { ImportSpec ";" } ")" ) .
ImportSpec = [ "." | PackageName ] ImportPath .
ImportPath = string_lit .
PackageName 用于限定標識符以訪問導入源文件中包的導出標識符。它在文件塊中聲明。如果省略 PackageName,則默認為導入包的包子句中指定的標識符。如果出現顯式句點 (.) 而不是名稱,則在該包的包塊中聲明的所有包的導出標識符將在導入源文件的文件塊中聲明,并且必須在沒有限定符的情況下訪問。
ImportPath 的解釋依賴于實現,但它通常是已編譯包的完整文件名的子字符串,并且可能與已安裝包的存儲庫相關。
實現限制:編譯器可以將 ImportPaths 限制為僅使用屬于 Unicode 的 L、M、N、P 和 S 通用類別(沒有空格的圖形字符)的字符的非空字符串,也可以排除字符 !"#$%& '()*,:;<=>?[]^`{|} 和 Unicode 替換字符 U+FFFD。
假設我們編譯了一個包含 package 子句 package math 的包,它導出函數 Sin,并將編譯后的包安裝在“lib/math”標識的文件中。此表說明了在各種類型的導入聲明之后如何在導入包的文件中訪問 Sin。
Import declaration Local name of Sin
import "lib/math" math.Sin
import m "lib/math" m.Sin
import . "lib/math" Sin
導入聲明聲明了導入包和導入包之間的依賴關系。一個包直接或間接地導入自己,或者直接導入一個包而不引用它的任何導出標識符都是非法的。要僅為其副作用(初始化)導入包,請使用空白標識符作為顯式包名稱:
import _ "lib/math"
錯誤
./main.go:11: imported and not used: "gitlab.com/myapp/api-auth/middlewares"
說你沒有使用 package middlewaresin package main,這是真的。
錯誤
./main.go:42: undefined: AcceptHandler
說你沒有AcceptHandler在 package 中定義main,這是真的。
“限定標識符是用包名稱前綴限定的標識符。限定標識符訪問必須導入的不同包中的標識符?!?/p>
例如,在 package 中main,使用限定標識符middlewares.AcceptHandler,這是 import 的一種用法"gitlab.com/myapp/api-auth/middlewares"。
- 1 回答
- 0 關注
- 382 瀏覽
添加回答
舉報