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

Jak*_*pov -3 go goland

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

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)
}
Run Code Online (Sandbox Code Playgroud)

这段代码不编译,编译器说undefined: init。当我改变init()Init()它的工作原理,但我不希望它是封装外提供。无论我在哪里读到这个问题,它都说从另一个包调用未导出的函数,但在这里我从同一个包调用它。

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

Bur*_*dar 5

init() 是一个特殊的函数。从语言规范:

func init() { ... }

即使在单个源文件中,每个包也可以定义多个这样的函数。在 package 块中,init 标识符只能用于声明 init 函数,而标识符本身并没有声明。因此不能从程序中的任何地方引用 init 函数。

使用init()程序包级别初始化。