方法method
- Go中虽没有class,但依然有method
- 通过显示说明receiver来实现与某个类型的组合 ??
- 只能为同一个包中的类型定义方法
- Receiver可以是类型的值或者指针
- 不存在方法重载
- 可以使用值或指针来调用方法,编译器会自动完成转换
- 从某种意义上来说,方法是函数的语法糖,因为receiver其实是方法所接受的第一个参数
- 如果外部结构和嵌入结构存在同名方法,则优先调用外部结构的方法
- 类型别名不会拥有底层类型所附带的方法
- 方法可以调用结构中的非公开字段
package main
import (
"fmt"
)
type A struct {
Name string
}
type B struct {
Name string
}
type C int
type D struct {
name string
}
func main() {
a := A{}
a.Show()
b := B{}
b.Show()
var c C
c.Show()
(*C).Show(&c)
d := D{}
d.Show()
fmt.Println(d.name)
}
func (a A) Show() {
fmt.Println("A")
}
func (b B) Show() {
fmt.Println("B")
}
func (c *C) Show() {
fmt.Println("C")
}
func (d *D) Show() {
d.name = "ddd"
fmt.Println(d.name)
}
直通车
网友评论