如何调用包内未导出的函数?

我正在尝试编写一个可以使用的包。这是示例代码:


package redis


import (

    "fmt"

    "github.com/gomodule/redigo/redis"

    "log"

    "os"

)


var conn redis.Conn


func init() {

    // code to set conn variable

}


func do(command string, args ...interface{}) (interface{}, error) {

    init()

    return conn.Do(command, args)

}

这段代码无法编译,编译器说undefined: init。当我更改init()它时Init(),它可以工作,但我不希望它在包之外可用。无论我在哪里读到这个问题,它都会说从另一个包调用未导出的函数,但在这里我从同一个包调用它。


此外,Goland IDE 将函数调用标记为unresolved reference并建议创建它。但是当我这样做时(通过 IDE 本身),它仍然看不到它。


烙印99
浏览 121回答 2
2回答

德玛西亚99

init() 是一个特殊函数。从语言规范来看:函数初始化() { … }每个包可以定义多个这样的函数,甚至在单个源文件中也是如此。在 package 块中,init 标识符只能用于声明 init 函数,而标识符本身并未声明。因此,不能从程序中的任何地方引用 init 函数。用于init()包级初始化。

缥缈止盈

在 Go 中,init保留用于初始化需要在包中完成的工作,例如。向某些注册表添加一些实现。要解决这个问题,需要使用另一个名称。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go