【问题标题】:Is there a "using" in golang? [duplicate]golang中有“使用”吗? [复制]
【发布时间】:2019-05-07 15:39:24
【问题描述】:

有没有办法在 golang 导入中使用名称而不每次都指定包名称? 在 C++ 中,我可以“使用”一个命名空间。 在 Java 中,当我导入某些内容时,会自动使用命名空间。

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

package myhighlevellibrary
import "mypackage"

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

我能否以某种方式避免在我的代码中多次写入“mypackage”字面量?随着我的图书馆越来越大,情况变得更糟......

【问题讨论】:

    标签: go


    【解决方案1】:

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

    引用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

    【讨论】:

      猜你喜欢
      • 2020-02-13
      • 2022-10-25
      • 2016-08-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-09
      • 1970-01-01
      相关资源
      最近更新 更多