为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
烙印99 2023-08-14 14:56:33
我正在尝试编写一个可以使用的包。这是示例代码:package redisimport (    "fmt"    "github.com/gomodule/redigo/redis"    "log"    "os")var conn redis.Connfunc 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 本身),它仍然看不到它。
查看完整描述

2 回答

?
德玛西亚99

TA贡献1770条经验 获得超3个赞

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

函数初始化() { … }

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

用于init()包级初始化。


查看完整回答
反对 回复 2023-08-14
?
缥缈止盈

TA贡献2041条经验 获得超4个赞

在 Go 中,init保留用于初始化需要在包中完成的工作,例如。向某些注册表添加一些实现。

要解决这个问题,需要使用另一个名称。

查看完整回答
反对 回复 2023-08-14
  • 2 回答
  • 0 关注
  • 113 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信