Golang之面向对象和指针
武大郎,来十个烧饼。。。
package main import "fmt" type Integer int //为内置的int类型增加了新方法less,面向对象写法
func (a Integer) Less(b Integer) bool {
return a < b
}
func Integer_Less(a Integer, b Integer) bool {
return a < b
} //Go的面向对象,如果需要修改对象,必须用指针,这不是Go约束,还是自然约束
func (a *Integer) Add(b Integer) {
*a += b
} //Integer类型是一个int,为int起一个别名Integer,
// 并且增加一系列方法Add,Add2,又编程了一个新的类型,这个类型还完全拥有int的功能
//传递值而不是指针
func (a Integer) Add2(b Integer) {
a += b
fmt.Println(a)
fmt.Println(b)
} func main() {
var a Integer =
if a.Less() {
fmt.Println(a, "Less 2")
}
if Integer_Less(a, ) {
fmt.Println(a, "Less 2")
}
//为Integer又加了Add方法,Add()方法需要修改对象的值,需要指针引用
//a.Add(2)
//fmt.Println("a=", a)
//实现成员方法传入的如果不是指针,而是值,也就是Integer,而非*Iteger,,这时a=1
a.Add2()
fmt.Println("a=", a)
//Go语言和C语言一样,类型都是基于值传递,想要修改变量的值,只能传递指针
} /*
Go语言中没有隐藏的this指针
方法施加的目标(“对象”)显示传递,没有被隐藏
方法施加的目标(“对象”)不需要非得是指针,也不用非得叫this */
大郎说,烧饼放在家里了
//值语义和引用语义
//b=a
//b.Modify()
//如果b的修改,不影响a的值,那么此类型就是值类型
//如果会影响a的值,那么此类型就是引用类型
//Go语言大多类型都是值语义
//基本类型:byte、int、bool、float32、float64、string等
//复合类型:数组(array)、结构体(struct)和指针(point)
//数组被完整的复制,就是值语义 func main() {
var a=[]int{,,}
var b=a //表示b=a赋值语句,是数组内容的完整复制
b[]++
fmt.Println(a,b)
} //引用方法,需要使用指针
func main() {
var a = []int{, , }
var b = &a //这句赋值,是数组内容的引用,变量b类型是*[3]int类型
b[]++
fmt.Print(a, *b)
}
Golang之面向对象和指针的更多相关文章
- golang之面向对象编程
1.Golang语言面向对象编程说明 1)Golang也支持面向对象编程(OOP),但是和传统的面向对象编程有区别,并不是纯粹的面向对象语言.所以我们说Golang支持面向对象编程特性是比较准确的. ...
- Golang值传递和指针传递
Golang值传递和指针传递 package main import ( "fmt" ) func swap1(x, y, p *int) { if *x > *y { *x ...
- golang OOP面向对象
摘自:http://www.01happy.com/golang-oop/ golang中并没有明确的面向对象的说法,实在要扯上的话,可以将struct比作其它语言中的class. 类声明 1 2 3 ...
- Golang中类面向对象特性
一.类型方法的实例成员复制与类型方法的实例成员引用 在Go中可以类似Java等面向对象语言一定为某个对象定义方法,但是Go中并没有类的存在,可以不严格的将Go中的struct类型理解为面向对象中的 ...
- Golang的面向对象编程【结构体、方法、继承、接口】
Golang也支持面向对象编程.但与以前学过传统的面向对象编程语言有区别.1)Golang没有类class,Go语言的结构体struct和类class有相似的特性.2)Golang中不存在继承,方法重 ...
- golang:面向对象总结
所谓的面向对象其实就是找一个专门做这个事的人来做,不用关心具体怎么实现的.所以说,面向过程强调的是过程,步骤.而面向对象强调的是对象,也就是干事的人. Go语言:面向对象语言特性 方法 嵌入 接口 没 ...
- golang中值类型/指针类型的变量区别总结
转自:https://segmentfault.com/a/1190000012329213 值类型的变量和指针类型的变量 先声明一个结构体: type T struct { Name string ...
- Go_15:GoLang中面向对象的三大特性
有过 JAVA 语言学习经历的朋友都知道,面向对象主要包括了三个基本特征:封装.继承和多态.封装,就是指运行的数据和函数绑定在一起,JAVA 中主要是通过 super 指针来完成的:继承,就是指 cl ...
- GoLang中面向对象的三大特性
有过 JAVA 语言学习经历的朋友都知道,面向对象主要包括了三个基本特征:封装.继承和多态.封装,就是指运行的数据和函数绑定在一起,JAVA 中主要是通过 super 指针来完成的:继承,就是指 cl ...
随机推荐
- 一个Self Taught Learning的简单例子
idea: Concretely, for each example in the the labeled training dataset xl, we forward propagate the ...
- 整理关于Java进行word文档的数据动态数据填充
首先我们看下,别人整理的关于Java生成doc 的 资料. java生成word的几种方案 1. Jacob是Java-COM Bridge的缩写,它在Java与微软的COM组件之间构建一座桥梁.使用 ...
- 【thrift】什么是rpc
- Linux下驱动模块学习
1.modutils中提供了相关的insmod,rmmod,modinfo工具2.modprobe在识别出目标模块所依赖模块后也是调用insmod.3.从外部看模块只是普通可重定位的目标文件.可重定位 ...
- 为什么 Windows 10 无论怎么设置一分钟后就自动关屏幕?
为什么 Windows 10 无论怎么设置一分钟后就自动关屏幕? 在设置中设置了很多方法,但不管怎么设置就是不行,不到一分钟一定关屏幕. 开始以为是能源之星引起,查了相关资料说不是,那个能源之星标志只 ...
- php fwrite写入文件bom头导致的乱码问题解决
最近导出文件遇到fwrite导出乱码,而且中英文都乱码,很费解.折腾了一番之后终于找到问题所在了,mark下. UTF-8 BOM 又叫 UTF-8 签名,其实 UTF-8 的 BOM 对 UFT-8 ...
- bzoj2330糖果
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2330 差分约束裸题.练习用spfa判正环(一个点入队超过n次). 据说有1e5个点连成一条链 ...
- 【开源推荐】PredictionIO:构建预测功能的机器学习服务器
PredictionIO是一款开源的机器学习服务器,开发工程师和数据分析师可以使用它构建智能应用程序,并且还可以做一些预测功能,比如个性化推荐.发现内容等.好比开发者可以使用数据库服务器过滤信息. P ...
- 最小化安装CentOS7,没有ifconfig命令---yum search command_name搜索未知包名
新安装的CentOS7系统,想查询ip的时候,发现没有ifconfig这个命令: -bash: ifconfig: 未找到命令 yum安装: 没有可用软件包 ifconfig 既然知道命令,搜索一下命 ...
- mysql-9索引
mysql索引的建立对于mysql的高效运行是很重要的,索引可以大大提高mysql的检索速度. 索引分为单列索引和组合索引. 单列索引,即一个索引只包含单个列,一个表可以有多个单列索引,但这不是组合索 ...