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()
}

注意点

  1. 结构体是值类型, 函数内修改值, 不会对外部产生影响

    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, "吃"}
    }
    
  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 吃}
    }
    
  3. 如果一个类型实现了String()string方法, 那么fmt.Println默认会调用这个变量的String()string进行输出, stuctType也可以是指针

    Javasout一样

    //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) //猪皮
    }
    
posted @ 2020-08-12 00:48  CyberPelican  阅读(157)  评论(0编辑  收藏  举报