“.” 是什么意思? (点或句点)在 Go import 语句中做什么?

发布于 2024-11-17 04:25:10 字数 491 浏览 2 评论 0 原文

在 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"    
)

.(句点)有何意义?

In the Go tutorial, and most of the Go code I've looked at, packages are imported like this:

import (
    "fmt"
    "os"
    "launchpad.net/lpad"
    ...
)

But in http://bazaar.launchpad.net/~niemeyer/lpad/trunk/view/head:/session_test.go, the gocheck package is imported with a . (period):

import (
    "http"
    . "launchpad.net/gocheck"
    "launchpad.net/lpad"
    "os"    
)

What is the significance of the . (period)?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

花辞树 2024-11-24 04:25:11

它允许在本地文件块中引用导入包中的标识符,而无需限定符。

如果出现显式句点 (.) 而不是名称,则包的所有导出标识符都将在当前文件的文件块中声明,并且无需限定符即可访问。

假设我们已经编译了一个包含 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

参考: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.

If an explicit period (.) appears instead of a name, all the package's exported identifiers will be declared in the current file's file block and can be accessed without a qualifier.

Assume we have compiled a package containing the package clause package math, which exports function Sin, and installed the compiled package in the file identified by "lib/math". This table illustrates how Sin may be accessed in files that import the package after the various types of import declaration.

Import declaration          Local name of Sin

import   "lib/math"         math.Sin
import M "lib/math"         M.Sin
import . "lib/math"         Sin

Ref: http://golang.org/doc/go_spec.html#Import_declarations

一身仙ぐ女味 2024-11-24 04:25:11

这是来自 Python 的类比:

  • Go 的 import "os" 大致相当于 Python 的 import os
  • Go 的 import 。 “os” 大致相当于 Python 的 from os import *

在这两种语言中,使用后者通常会被拒绝,但这样做可能有充分的理由。

Here's an analogy for those coming from Python:

  • Go's import "os" is roughly equivalent to Python's import os
  • Go's import . "os" is roughly equivalent to Python's from os import *

In both languages, using the latter is generally frowned upon but there can be good reasons for doing it.

勿忘初心 2024-11-24 04:25:11

这应该仅用于测试。

这里是 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!

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文