登录
首页 >  Golang >  Go问答

golang中有“using”吗?

来源:stackoverflow

时间:2024-04-05 23:42:34 455浏览 收藏

对于一个Golang开发者来说,牢固扎实的基础是十分重要的,golang学习网就来带大家一点点的掌握基础知识点。今天本篇文章带大家了解《golang中有“using”吗?》,主要介绍了,希望对大家的知识积累有所帮助,快点收藏起来吧,否则需要时就找不到了!

问题内容

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

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

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

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


解决方案


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

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

到这里,我们也就讲完了《golang中有“using”吗?》的内容了。个人认为,基础知识的学习和巩固,是为了更好的将其运用到项目中,欢迎关注golang学习网公众号,带你了解更多关于的知识点!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>