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 ...
随机推荐
- Java第三次作业--面向对象基础(封装)
Deadline: 2017-4-6 23:00 一.学习要点 认真看书并查阅相关资料,掌握以下内容: 掌握简单类的设计 掌握利用对象引用建立类与类之间的联系 掌握this关键字 掌握static关键 ...
- 树的直径证明+HDU2196
首先把无向图变成一棵树,直径肯定由叶子组成. 有以下两种情况: 第一种:经过根节点,则找两个最远的叶子肯定是直径,也就是B+D. 第二种:不经过根节点,则目标的两个叶子肯定有一个不为根的公共祖先,如红 ...
- 浅谈一致性Hash原理及应用
在讲一致性Hash之前我们先来讨论一个问题. 问题:现在有亿级用户,每日产生千万级订单,如何将订单进行分片分表? 小A:我们可以按照手机号的尾数进行分片,同一个尾数的手机号写入同一片/同一表中. 大佬 ...
- java编程之常见的排序算法
java常见的排序算法 第一种:插入排序 直接插入排序 1, 直接插入排序 (1)基本思想:在要排序的一组数中,假设前面(n-1)[n>=2] 个数已经是排 好顺序的,现在要把第n个数插到前面的 ...
- TypeScript学习笔记(八) - 声明文件
本篇将介绍TypeScript的声明文件,并简单演示一下如何编写和使用声明文件.本篇也是这个系列的最后一篇. 一.声明文件简介 TypeScript作为JavaScript的超集,在开发过程中不可避免 ...
- Yarn import now uses package-lock.json
转发自: https://yarnpkg.com/blog/2018/06/04/yarn-import-package-lock/?utm_source=tuicool&utm_medium ...
- MySql 中的 FIND_IN_SET 的使用和相关问题
MySql 中的 FIND_IN_SET 的使用和相关问题 QQ 群里有人讨论如果在 category_ids 中打开 12 的分类,而 category_ids 中的 ID 是以 逗号分开的. 使用 ...
- Hive之 hive架构
Hive架构图 主要分为以下几个部分: 用户接口,包括 命令行CLI,Client,Web界面WUI,JDBC/ODBC接口等 中间件:包括thrift接口和JDBC/ODBC的服务端,用于整合Hiv ...
- php 取数组最后一个元素
可以用end()函数取出数组的最后一个元素, $rList = array( array('id'=>1,'txt'=>'a'), array('id'=>2,'txt'=>' ...
- sublime 下面开发
sublime 下面开发 开发 ptyon 简单环境 1. 下载sublime 3 https://download.sublimetext.com/Sublime%20Text%20Build%20 ...