什么是C ++在golang中的“using”等价物

时间:2016-08-11 19:14:42

标签: c++ go namespaces

什么是C ++在golang中的using some_namespace::object等价物?

根据问题here 我可以通过以下声明获得using namespace common

import (
  . "common"
)

但这会导入整个命名空间。现在我只想使用platform定义,例如using common::platform

Go中是否有相应的内容,因此我不必一直输入common.platform

4 个答案:

答案 0 :(得分:4)

以下代码在可读性方面接近,但效率较低,因为编译器不能再内联函数调用。

import (
    "fmt"
    "strings"
)

var (
    Sprintf = fmt.Sprintf
    HasPrefix = strings.HasPrefix
)

而且,将名称fmtstrings导入到文件范围中会产生副作用,这是C ++ using所不具备的做。

答案 1 :(得分:2)

Go目前没有此类功能。

不要说它永远不会被添加:该语言有open proposal to add "Alias declarations"

答案 2 :(得分:1)

正如其他人所说,在Go中是不可能的。在Go中,您导入,而不是包中的函数或类型。

请注意,如果您创建帮助程序程序包,则可以轻松实现所需目的。

让我们说你想要"使用"仅限fmt.Println()fmt.Printf()个函数。创建一个帮助程序包:

package helper

import "fmt"

func Println(a ...interface{}) (n int, err error) {
    return fmt.Println(a...)
}

func Printf(format string, a ...interface{}) (n int, err error) {
    return fmt.Printf(format, a...)
}

你想要C ++"使用"功能,使用点.导入:

import . "helper"

func Something() {
    Println("Hi")
    Printf("Using format string: %d", 3)
}

结果是只有helper包的导出标识符在范围内,而fmt包中没有其他内容。您当然也可以使用此单helper包来使fmt以外的包中的函数可用。 helper可以导入任何其他包并拥有"代理"或委托人功能发布他们的功能。

就我个人而言,我并不觉得有必要这样做。我只需导入fmt并使用fmt.Println()fmt.Printf()调用其函数。

答案 3 :(得分:1)

也许您可以重命名包:

import ( c "common" cout2 "github.com/one/cout" cout2 "github.com/two/cout" )

然后你只需要输入c.Platform