在Go中编写全局函数 - 如append()

时间:2015-10-12 08:29:07

标签: go

问题很简单 - 如何在golang中实现独立于程序包的全局函数。

ID,如果我在一个名为core的包中有一个函数,那么从另一个包中我需要core.Function()来调用该函数。但是我在go实现中有一些函数,比如 - make(),append()for slice,可以在没有任何导入的情况下使用,也可以直接在任何包中使用。如果我想写这样的函数是什么方法呢?如果可能的话,我怎么能写这样的函数呢?

2 个答案:

答案 0 :(得分:9)

不可能完全按照自己的意愿行事,但你可以通过使用点导入来接近它。例如。如果您点击导入fmt包,则可以将fmt.Println拼写为Println

package main

import . "fmt"

func main() {
    Println("Hello, playground")
}

游乐场:http://play.golang.org/p/--dWV6PHYA

答案 1 :(得分:3)

简短的回答是:你不能。 Go具有内置函数和类型,但即使语言设计者也尽量将其数量保持在最低限度并尽可能避免使用它们。例如,有一个内置printf函数,但建议使用fmt.Printf代替,因为内置函数"不能保证保留在语言中#34;

虽然每次使用函数时必须预先添加包名称可能看起来很麻烦,但它有明显的优点(使代码更容易阅读,避免名称冲突)并且实际上并不像听起来那么糟糕包装设计师遵循"命名包装内容"在this blog post

示例:要从模式字符串创建Regexp对象,请调用regexp.Compile(),而不是regexp.CompileRegexp() - 因为在调用函数时使用包名称,函数的名称可以缩短。如果你使用"点导入"这当然会丢失。根据Ainar-G的建议。然后你会有Compile(),这可能会令人困惑("编译什么?")。