Go中的指针与函数接收器
Go中使用*号表示指针,但是没有指针算数,不能对其进行加减。同时内存管理都由Go来负责,不需要拖动释放内存。
Go中的函数接收者,可以为值类型,也可以是引用类型。
看代码:
package main import ( "fmt" ) type Rect struct { X, Y,Area,Length float64 } func (r *Rect) CalArea() { r.Area = r.X*r.Y } func (r Rect) CalLength() { r.Length = 2*(r.X+r.Y) } func main() { r1 := Rect{3, 4, 0, 0} r1.CalArea() r1.CalLength() fmt.Println(r1.Area) fmt.Println(r1.Length) r2 := &Rect{3, 4, 0, 0} r2.CalArea() r2.CalLength() fmt.Println(r2.Area) fmt.Println(r2.Length) }
运行结果:
12
0
12
0
可以直接在这里查看代码运行情况:
http://play.golang.org/p/ZleGPoyuEp
从上面的代码中可以看出:
1、Go中函数接收器可以理解为函数的一个参数,如果传的是引用,就可以改变调用函数中的值。
2、除了接收器中需要使用*来表明指针,在调用函数和被调用函数中*号和&符号均不是必须的,Go会在调用函数和使用参数时时根据接收器做转换。
-------------------------------------
欢迎关注微信公众号 golang_everyday 每日Go语言,每日推出一篇学习文章,欢迎阅读。
扫码关注更方便
欢迎关注微信公众号 golang_everyday 每日Go语言,每日推出一篇学习文章,欢迎阅读。
扫码关注更方便
.jpg)
· dotnet 9 通过 AppHostRelativeDotNet 指定自定义的运行时路径
· 如何统计不同电话号码的个数?—位图法
· C#高性能开发之类型系统:从 C# 7.0 到 C# 14 的类型系统演进全景
· 从零实现富文本编辑器#3-基于Delta的线性数据结构模型
· 记一次 .NET某旅行社酒店管理系统 卡死分析
· dotnet 9 通过 AppHostRelativeDotNet 指定自定义的运行时路径
· 使用 AOT 编译保护 .NET 核心逻辑,同时支持第三方扩展
· 一次小而美的重构:使用 C# 在 Avalonia 中生成真正好看的词云
· AI Agent离我们有多远?认知革命的开始(上篇)
· 记一次SQL隐式转换导致精度丢失问题的排查 → 不规范就踩坑