“.” 是什么意思? (点或句点)在 Go import 语句中做什么?
在 Go 教程以及我看过的大多数 Go 代码中,包都是这样导入的:
import (
"fmt"
"os"
"launchpad.net/lpad"
...
)
但是在 http://bazaar.launchpad.net/~niemeyer/lpad/trunk/view/head:/session_test.go,gocheck包导入时带有.
(句点):
import (
"http"
. "launchpad.net/gocheck"
"launchpad.net/lpad"
"os"
)
.
(句点)有何意义?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
它允许在本地文件块中引用导入包中的标识符,而无需限定符。
参考:http://golang.org/doc/go_spec.html#Import_declarations
It allows the identifiers in the imported package to be referred to in the local file block without a qualifier.
Ref: http://golang.org/doc/go_spec.html#Import_declarations
这是来自 Python 的类比:
import "os"
大致相当于 Python 的import os
import 。 “os”
大致相当于 Python 的from os import *
在这两种语言中,使用后者通常会被拒绝,但这样做可能有充分的理由。
Here's an analogy for those coming from Python:
import "os"
is roughly equivalent to Python'simport os
import . "os"
is roughly equivalent to Python'sfrom os import *
In both languages, using the latter is generally frowned upon but there can be good reasons for doing it.
这应该仅用于测试。
这里是 golang wiki 中的一些文档
如果您生成了一些模拟代码,例如mockgen 会导入你的包代码,然后你的测试包也导入你的包代码,你会得到一个循环依赖(golang 选择让用户决定如何解决)。
但是,如果在您的测试包中,您在正在测试的包上使用点表示法,那么它们将被视为同一个包,并且不存在循环依赖!
This should only be used in testing.
Here is some documentation in golang's wiki
If you've generated some mock code such as with mockgen and it imports your package code, and then your testing package also imports your package code, you get a circular dependency (Something golang chooses to let the user to decide how to resolve).
However, if inside your testing package you use dot notation on the package you're testing then they are treated as the same package and there is no circular dependency to be had!