频道栏目
首页 > 资讯 > 其他 > 正文

go语言之面向对象,结构体和方法学习

18-07-21        来源:[db:作者]  
收藏   我要投稿

感觉每种语言都是其他的语言的一些交集,看见go就有种kotlin和C的孩子的感觉,虽然我并不清楚他们之间的借鉴关系

go语言仅支持封装,不支持继承和多态

go语言只有struct没有class

go语言的结构的定义和C++类似

type treeNode struct {
value int
left, right *treeNode
}

为结构定义方法:

func (node treeNode) print() { //接收者相当于this,这个方法相当于kotlin的扩展方法
fmt.Print(node.value, " ")
}

显示定义和命名方法接收者

使用指针作为方法接受者

func (node *treeNode) setValue(value int) {
node.value = value
}

只有指针才可以改变结构内容

nil指针也可以调用方法!

func (node *treeNode) setValue(value int) {
if(node == nil) {
fmt.Println("Setting value to nil node, ignore it")
}
node.value = value
}

也就是通过这样的方式可以解决java中最常见的空指针异常的问题,这个问题是一个大问题,所以现在我尽可能使用kotlin开发android应用,java开发过程中的空指针问题真的是一种很麻烦的问题

常见操作(二叉树的中序遍历操作)

//中序遍历操作,基本操作
func (node *treeNode) traverse() {
if node == nil {
return
}
node.left.traverse()
node.print()
node.right.traverse()
}

值接收者和指针接收者的使用

1.要改变内容必须使用指针接收者

2.结构过大也考虑指针接收者

3.一致性:如有指针接收者,最好都是指针接收者

4.值接受者是go语言特有的

5.值/指针均可接收值/指针,并不会改变调用的方式,go语言在这方面很智能

相关TAG标签
上一篇:IOS开发之uitextview动态适应高度讲解
下一篇:CentOS 6下配置Bonding多网卡的实例教程
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站