Golang 方法
Golang 方法
定义
func (recevier stuctType)identifier()(){}
方法只能被structType
的实例调用
As Follow
type Monster struct {
Name string
Age int
skill string
}
//Say方法只能由Monster类型的实例调用
func (m Monster) Say() {
fmt.Printf("%v", m.Name+"会"+m.skill)
}
func main() {
monster := Monster{"猪皮", 2, "吃"}
monster.Say()
}
注意点
-
结构体是值类型, 函数内修改值, 不会对外部产生影响
type Monster struct { Name string Age int skill string } func (m Monster) Say() { m.Name = "中分" } func main() { monster := Monster{"猪皮", 2, "吃"} fmt.Println(monster) //{"猪皮", 2, "吃"} monster.Say() fmt.Println(monster) //{"猪皮", 2, "吃"} }
-
如果希望在方法中修改结构体变量的值, 可以通过指针结构体来处理
type Monster struct { Name string Age int skill string } //使用指针修改值 func (m *Monster) Say() { m.Name = "中分" } func main() { monster := Monster{"猪皮", 2, "吃"} monster.Say() //等价于(&monster).Say() fmt.Println(monster) //{中分 2 吃} }
-
如果一个类型实现了
String()string
方法, 那么fmt.Println
默认会调用这个变量的String()string
进行输出,stuctType
也可以是指针和
Java
的sout
一样//func (m Monster) String() string func (m *Monster) String() string{ str := m.Name return str } func main() { monster := Monster{"猪皮", 2, "吃"} //fmt.Println(monster) //猪皮 fmt.Println(&monster) //猪皮 }