博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Go语言中面向对象-结构体和方法
阅读量:5734 次
发布时间:2019-06-18

本文共 1524 字,大约阅读时间需要 5 分钟。

  hot3.png

主要讲解Go语言中面向对象中的 结构体和方法

主要知识点:

  • Go语言仅支持封装,不支持继承和多态,Go语言的设计者认为Go语言面向对象不需要继承和多态,只需要封装就够了,而继承和多态通过接口来实现就可以了,面向接口编程在面向对象领域也是一种趋势
  • Go语言中没有 class、只有 struct,封装就是结构体对结构体进行封装。
  • Go语言中没有构造方法,在初始化结构体时,提供了多种初始化方式。
  • 如果业务需要可以通过自定义工厂方法,实现构造方法的功能
  • 结构体对象可能在栈上,也可能在堆上,此时我们并不需要知道,当编译器觉得不需要返回地址的时候则在栈上创建,如果需要返回地址,则在堆上创建。
  • 熟悉为结构体定义方法,定义方法是分为  值接受者 和 指针接收者,只有指针接受者 才可以改变内容,如果结构体过大,也建议使用指针接受者

以下为代码示例:

package mainimport "fmt"//实体 结构体 定义type treeNode struct {	Value       int	Left, Right *treeNode}//自定义工厂方法 实现构造函数功能func createTreeNode(value int) *treeNode {	return &treeNode{Value:value}	//此处返回一个局部变量地址给外部使用,如果在 C++ 中,这是一个错误写法,会导致错误	//但在 Go中 不会出现问题}//为结构体定义方法,有一个接收者的概念,这个方法是 值接受者// 为treeNode 定义方法,node相当于 Java 中的 thisfunc (node treeNode) print()  {	fmt.Println(node.Value)}//定义set 方法,这里是 指针接收者func (node *treeNode) setValue(value int) {	if node == nil {		fmt.Println("Setting Value to nil " +			"node. Ignored.")		return	}	node.Value = value}//遍历对象方法func (node *treeNode) traverse()  {	if node == nil{		return	}	node.Left.traverse()	node.print()	node.Right.traverse()}func main() {	//申明空结构体	var root treeNode	//初始化部分属性	root = treeNode{Value:3}	//初始化空的结构体	root.Left = &treeNode{}	//申明时初始化全部属性	root.Right = &treeNode{5,nil,nil}	// new 是内置方法,返回对象的指针	root.Left.Right = new(treeNode)	root.Right.Left = createTreeNode(2)	//在Slice 中省略 结构体名的写法	nodes :=[]treeNode{		{Value:3},		{},		{6,nil,&root},	}	fmt.Println(nodes)	root.print() //3	root.Right.Left.setValue(4) //4	root.Right.Left.print()	//遍历对象方法	root.traverse()}

 

转载于:https://my.oschina.net/ruoli/blog/1815596

你可能感兴趣的文章
asp.net中ScriptManager自带Ajax与jQuery事件冲突
查看>>
转 python中%s与%d
查看>>
转:sqlplus与shell互相传值的几种情况
查看>>
转 搬家知识
查看>>
JS实现倒计时
查看>>
Linux学习日记(二)
查看>>
oracle SQL性能优化
查看>>
Java图片缩略图裁剪水印缩放旋转压缩转格式-Thumbnailator图像处理
查看>>
利用Junit实现eclipse单元测试
查看>>
Windows phone开发 页面布局之屏幕方向
查看>>
Windows phone开发数据绑定系列(1)--了解数据绑定
查看>>
leetcode — pascals-triangle
查看>>
超级密码 简单的广搜bfs(),要注意特殊情况的处理
查看>>
find函数
查看>>
CSS文本属性 文本阴影text-shadow 换行 text-overflow
查看>>
-------------初识----------动态规划。--------------------------------------------
查看>>
~~~~~~~~~~~析构函数~~~~~~~~
查看>>
Issue 0:发刊词
查看>>
计算广告学习5 - 在线广告市场
查看>>
小区划分 计蒜客提高组模拟赛(三)Day2 动态规划 区间DP NOIP模拟赛
查看>>