go语言基础-结构体方法
Goland语言面向对象编程说明
1、Goland 也支持面向对象编程,但是和传统的面向对象编程有区别 并不是纯粹的面向对象语言。
2、goland 没有类概念,go 语言的结构体和其他编程语言的类有同等地位 可以理解goland 是基于struct 来实现OOP特性的。
3,goland 面向对象编程非常简洁,去掉了传统OOP 语言的继承、方法重载、构造函数、析构函数以及隐藏的this指针等。
4、 golang仍然有面向对象编程的继承,封装和多态的特性,只是实现的方式和其它OOP语言不一样,比如继承:golang没有extends关键字,继承是通过匿名字段来实现。
5、 golang面向对象很优雅,OOP本身就是语言类型系统的一部分,通过接口关联,耦合性低,也非常灵活。
package main import "fmt"
/********************************************************************* 作用于特定类型的函数(即类型方法),特定类型变量称为接收者
定义语法: func (接收者变量 接收者类型) 方法名(参数列表) (返回参数列表) {} 建议: 1. 接收者变量:接收者的参数变量名在命名时,官方建议使用接收者类型名的第一个小写字母 2. 接收者类型:接收者类型和参数类似,可以是指针类型和非指针类型 3. 方法名、参数列表、返回参数: 其具体格式与函数定义相同 区别于平时的函数: 函数不属于任何类型,特定类型的函数(方法)属于特定类型 ***********************************************************************/
/***********************************************************************
这里重点介绍特定结构体的方法
- 方法的定义:方法实际上也是函数,只是在声明时,在关键字 func 和方法名之间增加了一个参数
- 普通的函数定义 func 方法名(入参) 返回值
- 自定义类型的方法定义 func (接收者) 方法名 (入参) 返回值
- 方法分为值传递和指针传递
- func (u user) notify() //值传递方式即copy一份user
- func (u *user) notify() //传递指针(即地址),内部改变会影响原结构体
什么时候使用指针接受者 1.需要修改接收者中的值 2.接收者是拷贝代价比较大的大对象 3.保证一致性,如果有某个方法使用了指针接收者,那么其他的方法也应该使用指针接收者 *************************************************************************/
//结构体类型或对象
type rect struct {
width,
height int
}
//方法的指针传递,r成为接受者变量,*rect成为接受者类型
func (r *rect) product() int { return r.width * r.height }
//方法的值传递 func (r rect) add() int { return 2*r.width + 2*r.height }
//小结:
// 当前rect就具有了两个方法 product和add // 可以给任何类型定义方法,扩展方法。 // 非本地类型不能定义方法,也就是说我们不能给别的包的类型定义方法 func main() { //方法一:初始化结构体以及其成员
r := rect{width: 10, height: 5} fmt.Println("area:", r.product()) fmt.Println("area:", r.add()) rs := &r fmt.Println("area:", rs.product()) fmt.Println("area:", rs.add())
//方法二:初始化的赋值的另外一种方法
var r1 rect
rect.width=10
rect.hight=14
fmt.Println(rect)
//方法三: 初始化的赋值的另外一种方法
r2 := rect{2, 16}
fmt.Println(r2)
}
分类:
go语言
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· AI与.NET技术实操系列(六):基于图像分类模型对图像进行分类