十、快速入门go语言之方法

文章目录

    • 方法
      • :one: 方法的概念
        • :star2: 内嵌类型的方法和继承
        • :star2: 多重继承

📅 2024年5月9日

📦 使用版本为1.21.5

方法

1️⃣ 方法的概念

⭐️ 在Go语言中没有类这个概念,可以使用结构体来实现,那类方法呢?Go也同样的实现,那就是方法

⭐️ 方法和函数长得很像,但是它多出来了一个"接收者"的选项(我也不知道为啥要这么高大上的名字,看书的时候都给我看蒙蔽了),其实就是和一个结构体(类),或者一个类型进行绑定比如下面的列子

this表示one这个类,和java中的this或者pythonself类似表示当前类,也就是表示这个方法是属于one类的

type one struct {a intb int
}func (this one) GetA() {//this类似于java中的this,表示这个类println(this.a) 
}func main() {one := &one{1, 2} //这里有没有很像创建一个类one.GetA()  //然后调用类方法
}

⭐️ 接收者的类型,可以是int,bool,string,数组函数的别名(经过type定义的)类型,但是不能是一个接口类型,接口是一个抽象定义,方法是具体的实现,而且还不能是一个指针类型,但是可以是可以是前面几种类型的指针类型

⭐️ 在go中方法和类可以不用写在一个源代码(体现的很明显了),可以分开写,但是必须在同一个包内!

⭐️ 方法在一个接收者类型中只能存在一个(名字),不能存在多个,但是可以在不同接收者类型中多个(名字)

//不同的接收者类型
func (this two) GetA() { println(this.a)
}func (this one) GetA() { println(this.a)
}

⭐️ 如果想定义的方法可以在外部调用(你可以发现Go中已经实现的方法如fmt.Println它们都是开头首字母大写),前面说过,需要首字母大写

⭐️ 绑定类型(传入接收者)最好是使用指针类型,否则传入的接收者类只是类的一个拷贝,下面这个列子就体现出来了

ps: 这里的SetGet很像java对不对

type one struct {a intb int
}func (this one) GetA() {println(this.a)
}
func (this one) SetA(i int) int { //修改athis.a = ireturn this.a
}func main() {one := &one{1, 2} one.GetA()        //输出1one.SetA(3) //使用Set方法修改为 3one.GetA()   //输出1
}

如果换成指针

type one struct {a intb int
}func (this *one) GetA() {println(this.a)
}
func (this *one) SetA(i int) int { //使用指针类型this.a = ireturn this.a
}func main() {one := &one{1, 2}one.GetA()  //输出1one.SetA(3) //使用Set方法修改为 3one.GetA()  //输出3
}

😀 学到这里我直接懂了!这玩意和类差不多,甚至可以可以定义自己的getset方法,包括toString也可以,(幸好之前学完了java)

type Person struct {Name stringage  intsex  string
}func (this *Person) GetName() { //get方法println(this.Name)
}
func (this *Person) SetName(i string) string { //set方法this.Name = ireturn this.Name
}
func (this *Person) ToString() { //Tostring方法fmt.Println("name :", this.Name,", age :", this.age,", sex :", this.sex,)
}func main() {p1 := Person{"zhangsan", 18, "man"}p1.ToString()
}

⭐️ 对象的字段不应该由2个或2个以上的不同线程在同一时间去改变(在后面会学解决办法)

🌟 内嵌类型的方法和继承

⭐️ 一个匿名类型被嵌入到结构体中,匿名类型的可见方法也同样被内嵌,相当于继承

🌟 多重继承

⭐️ 简单来说就是一个一个子类可以继承多个父类,在Java中是不被允许的,但是在Go结构体匿名字段下可以实现,只需要通过内嵌两个就好了

type Person struct { //人的基本Name stringage  intsex  string
}type Student struct { //学生School stringscore  intranked   int
}
type You struct { //你Person //你是个人也是一个学生Student
}func main() {p1 := You{Person:  Person{"lisi", 18, "男"},Student: Student{"茶啊二中", 99, 1},}fmt.Println(p1)
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/467171.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

知识中台赋能法律咨询服务:八大核心优势

法律咨询服务领域,知识中台以其独特的功能和优势,为行业发展注入了新的活力。以下是知识中台在法律咨询服务中展现的八大核心优势: 一、法律知识资源的全面整合 知识中台致力于收集、整理和整合各类法律知识资源,包括法律法规、…

【青牛科技】GC5931:工业风扇驱动芯片的卓越替代者

在工业领域,工业风扇的稳定高效运行对于维持良好的生产环境至关重要。而驱动芯片作为工业风扇控制系统的核心元件,其性能直接影响风扇的工作状态。芯麦 GC5931 作为一款新型驱动芯片,在替代 A5931/Allegro 应用于工业风扇中展现出了非凡的优势…

使用Netty实现一个简单的聊天服务器

✅作者简介:热爱Java后端开发的一名学习者,大家可以跟我一起讨论各种问题喔。 🍎个人主页:Hhzzy99 🍊个人信条:坚持就是胜利! 💞当前专栏:Netty 🥭本文内容&a…

【HarmonyOS】鸿蒙应用低功耗蓝牙BLE的使用心得 (二)

【HarmonyOS】鸿蒙应用低功耗蓝牙BLE的使用心得 (二) 一、前言 目前鸿蒙应用的实现逻辑,基本都是参考和移植Android端来实现。针对BLE低功耗蓝牙来说,在鸿蒙化的实现过程中。我们发现了,鸿蒙独有的优秀点&#xff0c…

第六十三周周报 GCN-CNNGA

文章目录 week 63 GCN-CNNGA摘要Abstract1. 题目2. Abstract3. 文献解读3.1 Introduction3.2 创新点 4. 网络结构4.1 数据分析4.2 混合深度学习框架的发展4.3 Mul4.4 CNN block4.5 GCN block4.6 GRU block4.7 注意力机制4.8 模型评估标准 5. 实验结果5.1 不同邻接矩阵的性能评价…

geoserver+postgis 最短路径规划常见问题记录

一、说明 具体实现步骤可参考其他博文,下面的这个博主写的很详细,步骤很清晰,注释也很全。geoserverpostgis 最短路径规划_geoserver 最短路径 存储过程-CSDN博客 本次文章,仅记录过程中需要注意的方面。 二、数据预处理 目标&a…

石油安全理论知识题库 考试宝在线刷题

一、单选题(每题有4个选项,其中只有1个是正确的,将正确的选项号填入括号内) 1.新修订的《中华人民共和国安全生产法》于( )正式实施。 A、2014年1月1日 B、2014年12月1日 C、2015年1月1日 D、2015年…

航空标志灯技术革新:提升夜间飞行安全

航空标志灯 随着低空飞行活动的增多和新型飞行器(如无人机、热气球和直升机)的普及,地面重要设施的安全面临前所未有的挑战。因此,航空标志灯的安装变得尤为重要。它们通过提升城市天际线、广袤乡村、跨河桥梁及电力网络等复杂地…

前后端交互接口(三)

前后端交互接口(三) 前言 前两集我们先做了前后端交互接口的约定以及浅浅的阅读了一些proto代码。那么这一集我们就来看看一些重要的proto代码,之后把protobuffer给引入我们的项目当中! gateway.proto 我们来看一眼我们的网关…

机器学习—sigmoid的替代品

Z状结肠激活函数,在隐藏层中,在输出层,因为用逻辑回归建立神经网络,创造了大量的逻辑回归单元,但是如果你使用其他激活函数,神经网络可以变得更加强大。 以需求预测为例,给定价格,航…

数据分析-44-时间序列预测之深度学习方法TCN

文章目录 1 TCN简介1.1 网络示意图1.2 TCN优点2 模拟应用2.1 模拟数据2.2 预处理创建滞后特征2.3 划分训练集和测试集2.4 创建TCN模型2.5 模型训练2.6 模型预测3 自定义my_TCN模型3.1 my_TCN()函数3.2 训练模型3.3 模型预测3.4 改进4 参考附录1 TCN简介 时间卷积网络(TCN)是…

2024最新AI绘画系统软件(Midjourney)+GPT4文档分析总结,多模态识图理解,AI文生图/图生图/混图生图(图像混合)

一、前言 人工智能的快速发展已成为全球关注的焦点,其应用领域广泛,涵盖绘图、语言处理、视频编辑等。前沿技术不仅推动科技创新,还在艺术创作、内容生产和商业实践等方面展示出巨大潜力。例如,AI语言模型显著提升了内容自动生成、…

input file检验成功之后才可以点击

input file检验成功之后才可以点击 需求 在上传发票前需要先填写发票号,然后点击选择文件直接完成上传功能 实现思路 在没有输入发票号之前,file按钮不可用不能点击,输入之后,按钮可用,点击之后选择文件&#xff…

每日OJ题_牛客_AB31活动安排_区间贪心_C++_Java

目录 牛客_AB31活动安排_区间贪心 题目解析 C代码 Java代码 牛客_AB31活动安排_区间贪心 活动安排_牛客题霸_牛客网 描述: 给定n个活动,每个活动安排的时间为[ai,bi)。求最多可以选择多少个活动,满足选择的活动时间两两之间没有重合。 …

购物车-多元素组合动画css

学习 渡一课程 多元素组合动画 练习。 在我们开发购物车功能时,经常会有点击添加按钮,就会有一个小圆点掉进购物车的动画,如下图所示,今天我们通过css来实现。 首先实现多元素组合动画 直接上代码,可以复制到本地使用…

深度学习:bert模型

multi-headed机制 1、通过不同的head得到多个特征表达,一般8个head 2、将所有特征拼接在一起 3、降维,将Z0~Z7连接一个FC全连接实现降维 多层堆叠 位置编码 如何实现位置编码? (1)为每个时间步添加一个0-1范围内的数…

Android Glide动态apply centerCropTransform(),transition withCrossFade动画,Kotlin

Android Glide动态apply centerCropTransform(),transition withCrossFade动画,Kotlin import android.graphics.Bitmap import android.os.Bundle import android.widget.ImageView import androidx.appcompat.app.AppCompatActivity import com.bumptech.glide.Glide import …

Vue 组件通信-自定义事件(七)

一、组件自定事件概念 自己定义的事件,包含事件名,事件回调等,定义好之后去给组件使用。也是一种组件的通信方式,适用于子组件传递给父组件。 二、 组件自定义事件实现子传父 1、在父组件中给子组件绑定一个自定义事件 在子组件标…

计算机的错误计算(一百四十八)

摘要 本节探讨 MATLAB 中 附近数的正割函数与 附近数的余割函数的计算精度问题。 例1. 已知 计算 直接贴图吧: 另外,16位的正确值分别为 0.4105556037464873e9、0.3670813182326778e13、-0.2549029285657875e8 与 -0.1248777628817462e12&am…

《XGBoost算法的原理推导》12-14决策树复杂度的正则化项 公式解析

本文是将文章《XGBoost算法的原理推导》中的公式单独拿出来做一个详细的解析,便于初学者更好的理解。 我们定义一颗树的复杂度 Ω Ω Ω,它由两部分组成: 叶子结点的数量;叶子结点权重向量的 L 2 L2 L2范数; 公式(…