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 = 1
    if a.Less(2) {
        fmt.Println(a, "Less 2")
    }
    if Integer_Less(a, 2) {
        fmt.Println(a, "Less 2")
    }
    //为Integer又加了Add方法,Add()方法需要修改对象的值,需要指针引用
    //a.Add(2)
    //fmt.Println("a=", a)
    //实现成员方法传入的如果不是指针,而是值,也就是Integer,而非*Iteger,,这时a=1
    a.Add2(2)
    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=[3]int{1,2,3}
var b=a //表示b=a赋值语句,是数组内容的完整复制
b[1]++
fmt.Println(a,b)
}

//引用方法,需要使用指针
func main() {
    var a = [3]int{1, 2, 3}
    var b = &a //这句赋值,是数组内容的引用,变量b类型是*[3]int类型
    b[1]++
    fmt.Print(a, *b)
}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Java帮帮-微信公众号-技术文章全总结

04-02.总结switch,for,while,do。while跳转语句

(4)do...while循环 A:基本格式 do { 循环体语句; }while(判断条件语句); 扩展格式: 初始化语句; do { 循环体语...

3934
来自专栏mySoul

通过css类/选择器选取元素 文档结构和遍历 元素树的文档

尽管如此,js还定义了一个方法,即一个getElementsByClassName(),是基于class属性值中的标识符来选取成组的文档元素

952
来自专栏行者常至

004.golang 常量与运算符

Go虽然保留了指针,但与其它编程语言不同的是,在Go当中不 支持指针运算以及”->”运算符,而直接采用”.”选择符来操作指针 目标对象的成员

1091
来自专栏GreenLeaves

JavaScript之获取和设置元素属性

1.与我前面的随笔获取元素的那些方法不同http://www.cnblogs.com/GreenLeaves/p/5689075.html 获取元素属性的方法g...

21610
来自专栏谈补锅

JS面向对象笔记二

注意点:当构造函数里面有return关键字时,如果返回的是非对象,new命令会忽略返回的信息,最后返回时构造之后的this对象;   如果return返回的是与...

3067
来自专栏章鱼的慢慢技术路

Go指南_切片的长度与容量

1284
来自专栏Golang语言社区

Go语言入门基础

指针 Go 具有指针。 指针保存了变量的内存地址。 类型 *T 是指向类型 T的值的指针。其零值是 nil 。 var p *int 复制代码 & 符号会生成一...

3807
来自专栏前端说吧

JS-节点属性(常用!)

3445
来自专栏lzj_learn_note

4-字符串

字段宽度是转换后的值保留的最小字符个数,精度是数字转换结果中应该包含的小数位数或字符串转换后的值所能包含的最大字符个数。

903
来自专栏天天

DOM

861

扫码关注云+社区

领取腾讯云代金券