什么是C ++在golang中的using some_namespace::object
等价物?
根据问题here
我可以通过以下声明获得using namespace common
:
import (
. "common"
)
但这会导入整个命名空间。现在我只想使用platform
定义,例如using common::platform
Go中是否有相应的内容,因此我不必一直输入common.platform
?
答案 0 :(得分:4)
以下代码在可读性方面接近,但效率较低,因为编译器不能再内联函数调用。
import (
"fmt"
"strings"
)
var (
Sprintf = fmt.Sprintf
HasPrefix = strings.HasPrefix
)
而且,将名称fmt
和strings
导入到文件范围中会产生副作用,这是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