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,这是真的。
“限定标识符是用包名称前缀限定的标识符。限定标识符访问必须导入的不同包中的标识符。”
例如,在 package 中main,使用限定标识符middlewares.AcceptHandler,这是 import 的一种用法"gitlab.com/myapp/api-auth/middlewares"。
- 1 回答
- 0 关注
- 323 浏览
添加回答
举报