go 方法接受者 是指针类型和非指针类型的 区别
go 方法接受者 是指针类型和非指针类型的 区别
非指针类型
package mainimport "fmt"// 定义接口
type Car interface {GetName() stringRun()
}// 定义结构体
type Tesla struct {Name string
}// 实现接口的GetName()方法
func (t Tesla) GetName() string {t.Name = "test"return t.Name
}// 实现接口的Run()方法
func (t Tesla) Run() {fmt.Printf("%s is running\n", t.Name)
}func main() {var c Carvar t Tesla = Tesla{"Tesla Model S"}c = t // 上面是用指针*Tesla实现了接口的方法,这里要传地址fmt.Println(c.GetName())c.Run()
}
test
Tesla Model S is running
指针类型
package mainimport "fmt"// 定义接口
type Car interface {GetName() stringRun()
}// 定义结构体
type Tesla struct {Name string
}// 实现接口的GetName()方法
func (t *Tesla) GetName() string {t.Name = "test"return t.Name
}// 实现接口的Run()方法
func (t *Tesla) Run() {fmt.Printf("%s is running\n", t.Name)
}func main() {var c Carvar t Tesla = Tesla{"Tesla Model S"}c = &t // 上面是用指针*Tesla实现了接口的方法,这里要传地址fmt.Println(c.GetName())c.Run()
}
test
test is running
结论
传递指针 可以 修改 传递的结构体的值,在其他方法中也生效。
原来一直写python,不了解指针有啥用。 用到这里明白了一点点。
转载于:https://blog.51cto.com/hequan/2335277
go 方法接受者 是指针类型和非指针类型的 区别相关推荐
- Java技能点--基本类型与非基本类型
点此查看全部文字教程.视频教程.源代码 本文目录 1. 概述 2. 基本类型 3. 非基本类型 4. 内存的不同位置 1. 概述 Java号称一切皆为对象,此话不假,但是尚需知道Java中的对象分两种 ...
- [go]method的指针声明及非指针声明
刚入手golang,大概弄清楚了method在go里的概念. 以下大部分为搬运过程重写代码. method可以为一个type添加(声明)一个方法,例如: type Cat struct { }func ...
- c++(/clr)非托管类型和托管类型互转
以下代码必须有"Common Language Runtime Support(/clr)" 和"MFC"支持 1. 字符窜之间的转换 1 // 托管类型到非托 ...
- 指针:const与指针
const类型的指针可以指向非const类型的对象,但const类型的对象必须由const类型的指针指定: // C++ 语言强制要求指向 const 对象的指针也必须具有 const 特性const ...
- 库存物料与非库存物料的区别
在JDE中可设置物料的储存种类,一般使用2中,管理库存与不管理库存,这二者在配置上有以下区别 行类型 S-库存类型 N-非库存类型 物料文档 F4101物料主文件:二者皆需维护 F4102物料分布文件 ...
- 明显调用的表达式前的括号必须具有指针函数类型_基于指针对象的方法
" 本文来源于<The Go Programming Language>" 6.2. 基于指针对象的方法 当调用一个函数时,会对其每一个参数值进行拷贝,如果一个函数需要 ...
- 【Android FFMPEG 开发】FFMPEG 方法中指针类型参数说明 ( 一维指针类型参数 | 二维指针类型参数 )
文章目录 I . 一维指针类型参数 II . 二维指针类型参数 I . 一维指针类型参数 1 . 音视频流数据包获取 : //读取数据包AVPacket *avPacket = av_packet_a ...
- c++ 表达式必须包含指向类的指针类型_C++:18const关键字(附常量指针、指针常量、常量指针常量)...
一.const变量的一些基本特点 ①const修饰的变量不能被修改 const int a=10; a=20;//错误 ②因为const修饰的变量不能被修改,所以必须被初始化 int a=10; co ...
- python布尔类型运算_Python对象类型及其运算方法(详解)
基本要点: 程序中储存的所有数据都是对象(可变对象:值可以修改 不可变对象:值不可修改) 每个对象都有一个身份.一个类型.一个值 例: >>> a1 = 'abc' >> ...
最新文章
- 新雨个人面试经验总结
- DL中版本配置问题:TensorFlow、Keras、Python版本完美搭配推荐
- 揭秘《死者之书》之环境资源及特效创作
- 30行代码AC——例题6-3 矩阵链乘(Maxtrix Chain Multiplication, UVa 442)——解题报告
- mysql云数据库 磁盘利用率_云数据库MySQL参数的那些事儿
- linux游戏调试,LINUX游戏服务器的安装与调试.doc
- PHPstorm内存不足
- dotween路径移动_Unity---DOTween插件学习(3)---获取数据、协程、路径动画
- VIMrc 配置文件
- atitit.thumb生成高质量缩略图 php .net c++ java
- 解决 Elastic Search 的 Fast Vector Highlighting (FVH) 策略无法高亮 nested 数据类型
- saas和pass的区别
- 一步一步教你 https 抓包
- ASO新手快速入门教程
- JavaScript之切换背景图片(并使)背景栏保持和背景色调相似
- TAGE Branch Predictor/分支预测
- zsh: no matches found: 错误解决 setopt no_nomatch
- 新手选择蓝牙耳机要注意什么?双11发烧友疯狂推荐五款蓝牙耳机
- define的函数用法
- 金蝶软件怎么过账_超详细!金蝶财务软件实操流程