go类(结构体)和对象

打印 上一主题 下一主题

主题 905|帖子 905|积分 2715

结构体


  • 结构体界说的函数分为值接收者方法和指针接收者方法

    • 调用方式:

      • 使用值接收者的方法可以通过值或指针调用。
      • 使用指针接收者的方法必须通过指针调用。(不对,值对象调用指针方法时会自动转化为指针对象,所以使用指针接收者的方法可以通过值或指针调用)

    • 方法内部对接收者的修改:

      • 如果方法必要修改接收者的值,则必须使用指针接收者。
      • 如果方法不必要修改接收者,可以使用值接收者。


  1. type Person struct {   name string  }
  2. func (p Person) Speak1() string {  return "Hello, my name is " + p.name }
  3. func (p *Person) Speak2() string {  return "Hello, my name is " + p.name }
  4. pp:=Person{"my_name"}
  5. pp.Speak1()  // 正确
  6. pp.Speak2()  // 错误
复制代码
实例化


  • 结构体实例化对象方式:

    • 直接通过结构体名和字段名初始化,返回值范例
    • 直接new,返回指针范例
    • 对于复杂的类,写一个NewStructname() *Structname函数来实例化,类似于构造函数(工厂模式)
    • 先声明结构体变量,再逐个字段赋值
    • 直接创建匿名结构体的实例,无需提前界说结构体范例,适用于一次性使用的简单数据

继续


  • go里面的继续其实是组合。
  1. type Animal struct {  Name string  }
  2. type Dog struct {  
  3.     Animal    // 嵌入(继承) Animal 类型  
  4.     Breed     string  
  5. }  
复制代码

  • 继续方式

    • 指针继续
    • 值继续

  1. type Animal struct {}
  2. func (a *Animal) Speak() {
  3.     fmt.Println("Animal speaks")
  4. }
  5. type Cat struct {
  6.         *Animal
  7. }
  8. type Cat struct {  // 无法调用Speak方法,因为Speak方法是指针接收者方法
  9.         Animal
  10. }
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

王海鱼

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表