当前位置: 首页 > article >正文

go类(结构体)和对象

结构体

  1. 结构体定义的函数分为值接收者方法和指针接收者方法
    • 调用方式:
      • 使用值接收者的方法可以通过值或指针调用。
      • 使用指针接收者的方法必须通过指针调用。(不对,值对象调用指针方法时会自动转化为指针对象,所以使用指针接收者的方法可以通过值或指针调用)
    • 方法内部对接收者的修改:
      • 如果方法需要修改接收者的值,则必须使用指针接收者。
      • 如果方法不需要修改接收者,可以使用值接收者。
type Person struct {   name string  }
func (p Person) Speak1() string {  return "Hello, my name is " + p.name } 
func (p *Person) Speak2() string {  return "Hello, my name is " + p.name } 
pp:=Person{"my_name"}
pp.Speak1()  // 正确
pp.Speak2()  // 错误

实例化

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

继承

  1. go里面的继承其实是组合。
type Animal struct {  Name string  } 
type Dog struct {  
    Animal    // 嵌入(继承) Animal 类型  
    Breed     string  
}  
  1. 继承方式
    • 指针继承
    • 值继承
type Animal struct {}

func (a *Animal) Speak() {
    fmt.Println("Animal speaks")
}

type Cat struct {
	*Animal
}

type Cat struct {  // 无法调用Speak方法,因为Speak方法是指针接收者方法
	Animal
}

http://www.kler.cn/a/569763.html

相关文章:

  • 派可数据BI接入DeepSeek,开启智能数据分析新纪元
  • GPT-4.5
  • 力扣785. 判断二分图
  • 黑龙江省地标-DB31/T 862-2021 “一网通办”政务服务中心建设和运行规范
  • js基础二
  • 我通过AI编程完成了第一个实用程序
  • 避免 Git 文件名大小写出错
  • CAN总线通信协议学习2——数据链路层之帧格式
  • 服务器项目部署环境配置(windows10)
  • 【大模型系列篇】DeepSeek开源周,解锁AI黑科技
  • Mac OS Homebrew更换国内镜像源(中科大;阿里;清华)
  • keil主题(vscode风格)
  • leetcode 59. 螺旋矩阵 II 中等
  • C# 中 Array、ArrayList 和 List 的比较
  • 【前端基础】3、HTML的常用元素(h、p、img、a、iframe、div、span)、不常用元素(strong、i、code、br)
  • 2025年3月2日笔记
  • DeepSeek 助力 Vue3 开发:打造丝滑的悬浮按钮(Floating Action Button)
  • CentOS 7 日志切割实战:Logrotate 详解与配置指南
  • Java 8 中,可以使用 Stream API 和 Comparator 对 List 按照元素对象的时间字段进行倒序排序
  • 解决vue中formdata 传值为空 控制台报错SyntaxError - expected expression, got ‘<‘