• 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) //猪皮
      }
      
  • 相关阅读:
    HelloWorld入门程序
    再写博客
    iOS--小结系列一
    iOS--ARC
    ios--block
    iOS--protocol
    iOS--内存管理
    指针基本概念
    ZooKeeper系列之十:ZooKeeper的一致性保证及Leader选举
    ZooKeeper系列之九:ZooKeeper API简介及编程
  • 原文地址:https://www.cnblogs.com/kikochz/p/13488295.html
Copyright © 2020-2023  润新知