无法通过 var 从另一个包访问方法。方法名称()



我有一个包,其中包含一些与之相关的结构和函数:

package samplepkg
type SampleStruct struct {
FirstString string
SecondString string
}
func init() {
// some operations
}
func CheckSomething(s *SampleStruct) bool {
// check something
}

现在我正在尝试在另一个包中运行此函数:

import (
"MyProject/samplepkg"
)
func testFunc() {
var s = samplepkg.SampleStruct{"a", "b"}
if s.CheckSomething() {
// do some operations
}
}

但是我收到一个错误,即s.CheckSomething未定义。(和s(。CheckSomething给出了相同的结果。我可以访问 s.FirstString 和 s.SecondString 以及通过调用

if samplepkg.CheckSomething(&s) {
// do some operations
}

但我觉得它可以用更好的方式写。我知道 Go 不是面向对象的语言,但这样的方法调用是可能的吗?

在 Golang 中,方法集定义为:

类型可能具有与之关联的方法集。的方法集 接口类型是其接口。任何其他类型 T 的方法集 由使用接收器类型 T 声明的所有方法组成。方法集 对应的指针类型 *T 是所有方法的集合 使用接收器 *T 或 T 声明(即,它还包含方法 T的集合(。其他规则适用于包含嵌入字段的结构, 如结构类型一节中所述。任何其他类型都有一个 空方法集。在方法集中,每个方法必须具有唯一的 非空方法名称。

有一个错误,因为在调用函数时,您使用的是指针接收器和方法。因此,在定义为方法时将函数更改为:

func init() {
// some operations
}
func(s *SampleStruct) CheckSomething() bool {
// check something
}

或者当调用该方法时,它应该是带有参数SampleStruct函数

,这将类似于
import (
"MyProject/samplepkg"
)
func testFunc() {
var s = &samplepkg.SampleStruct{"a", "b"}
if CheckSomething(s) {
// do some operations
}
}

最新更新