在Go教程中,以及我看过的大多数Go代码,包都是这样导入的:
import (
"fmt"
"os"
"launchpad.net/lpad"
...
)
Run Code Online (Sandbox Code Playgroud)
但是在http://bazaar.launchpad.net/~niemeyer/lpad/trunk/view/head:/session_test.go中,gocheck包导入了一个.(句点):
import (
"http"
. "launchpad.net/gocheck"
"launchpad.net/lpad"
"os"
)
Run Code Online (Sandbox Code Playgroud)
.(期间)有什么意义?
tva*_*son 173
它允许在没有限定符的情况下在本地文件块中引用导入的包中的标识符.
如果出现显式句点(.)而不是名称,则所有包的导出标识符将在当前文件的文件块中声明,并且可以在没有限定符的情况下访问.
假设我们编译了一个包含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
Run Code Online (Sandbox Code Playgroud)
参考:http://golang.org/doc/go_spec.html#Import_declarations
Eva*_*haw 64
以下是来自Python的类比:
import "os"大致相当于Python的import osimport . "os"大致相当于Python的from os import *在这两种语言中,使用后者通常都不赞成,但这样做有充分的理由.
这应该只用于测试。
如果您生成了一些模拟代码,例如使用 mockgen 并导入了您的包代码,然后您的测试包也导入了您的包代码,那么您将获得循环依赖(Golang 选择让用户决定如何解决)。
但是,如果在您的测试包中,您在要测试的包上使用点表示法,那么它们将被视为相同的包,并且没有循环依赖!
| 归档时间: |
|
| 查看次数: |
19051 次 |
| 最近记录: |