在Go语言中,如果结构体中的变量是私有的(即小写字母开头),那么它们只能通过结构体的实例进行访问和修改。如果你想给结构体赋值,你需要先创建一个结构体的实例,然后通过该实例来访问和修改结构体的私有变量
示例代码:
package main
import (
"fmt"
)
// BaseFilter结构体定义了3个私有变量
type BaseFilter struct {
bodyRaw interface{}
query string
logID string
}
// ANNFilter结构体定义了1个公有变量
type ANNFilter struct {
BaseFilter
}
// 创建实例
func NewANNFilter() *ANNFilter {
return &ANNFilter{
BaseFilter: BaseFilter{},
}
}
func (bf *BaseFilter) ParseRequest(name string) error {
// 通过实例方法设置私有变量的值
bf.query = "hello world"
fmt.Println(name)
fmt.Println(bf.query)
return nil
}
func (anf *ANNFilter) Process() error {
// ANNFilter可以使用它公有变量的共有方法
anf.ParseRequest("ANNFilter")
return nil
}
func main() {
anf := NewANNFilter()
anf.Process()
anf.ParseRequest("BaseFilter")
}
输出结果
[work@aaa xxx]$ go run test.go
/home/work/.deck/1.0/go/1.21/bin/go run test.go
ANNFilter
hello world
BaseFilter
hello world