前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Golang之面向对象和指针

Golang之面向对象和指针

作者头像
超蛋lhy
发布2018-08-31 15:50:52
3940
发布2018-08-31 15:50:52
举报
文章被收录于专栏:Pythonista
代码语言:javascript
复制
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

*/

 大郎说,烧饼放在家里了

代码语言:javascript
复制
//值语义和引用语义
//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)
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-01-09 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档