golang中有“使用中”吗?

时间:2019-05-07 07:27:22

标签: go

有没有一种方法可以在golang导入中使用名称而无需每次都指定软件包名称? 在C ++中,我可以“使用” nampespace。 在Java中,当我导入某些内容时,将自动使用名称空间。

有时,我有一个高级帮助程序库,其主要目的是使用另一个pacakge,并为其提供一些高级包装器。在代码中反复使用pacakge名称似乎过于冗长。

package myhighlevellibrary
import "mypackage"

func Foo() *mypackage.SomeType{
  a:=mypackage.Somefunction();
  b:=mypackage.SomeFactoryMethod(a);
  return b
}

我可以以某种方式避免在我的代码中多次编写“ mypackage”文字吗?随着我的图书馆越来越大,情况变得越来越糟...

1 个答案:

答案 0 :(得分:6)

可以使用“点”导入。在导入声明中使用.作为程序包名称,这样您就可以引用程序包的导出标识符,就像在导入程序包中声明它们一样。

引用Spec: Import declarations:

  

如果出现一个明确的句点(.)而不是名称,则在该软件包的package block中声明的所有软件包导出标识符将在导入源文件的文件块中声明,并且必须在没有限定词。

这是您的示例的样子:

package myhighlevellibrary

import . "mypackage"

func Foo() *SomeType {
    a := Somefunction()
    b := SomeFactoryMethod(a)
    return b
}

这是可运行的Playground example

package main

import (
    . "fmt"
    . "reflect"
)

func main() {
    Println(TypeOf("text")) // short for: fmt.Println(reflect.TypeOf("text"))
}

查看相关的/可能的重复项:What's C++'s `using` equivalent in golang