05 go语言_面向“对象”

1、面向对象:
1-1、go语言仅支持封装,不支持继承和多态。
1-2、go语言没有class,只有struct。
2、结构对定义:
type TreeNode struct {
Left, Right *TreeNode
Value int
}
3、结构对创建:
3-1、不论地址还是结构本身,一律使用.来访问成员。例:
root = TreeNode{value: 3}
root.Left = & TreeNode{}
root.Right = & TreeNode{5,nil,nil}
root.Right.Left = new(TreeNode)
3-2、使用自定义工厂函数。
3-3、注意返回例局部变量对地址。例:
func createTreeNode(value int) *TreeNode {
return &TreeNode {Value:value}
}
root.Left.Right = createTreeNode(2)
3-4、为结构定义方法:显示定义和命名方法接受者。例:
func (node treeNode) print() {
fmt.Print(node.value)
}
3-5、使用指针作为方法接收者:
3-5-1、只有使用指针才可以改变结构内容(如有指针接收者,尽量使用指针接收者)。
3-5-2、nil 指针也可以调用方法。
例:func (node *treeNode) setValue(value int) {
node.value = value
}
3-6、值接受者 VS 指针接受者:

  • 要改变内容必须使用指针接受者。
  • 结构过大也考虑使用指针接收者。
  • 一致性:如有指针接受者,最好都是指针接受者。
  • 值接收者:是go语言特有。
  • 值/指针接受者均可接受值/指针。
type treeNode struct {
		value	int
		left, right *treeNode
	}
	func (node treeNode) print() {
		fmt.Print(node.value)
	}
	func (node *treeNode) setValue(value int) {
		if node == nil {
			fmt.Println("Setting value to nil node")
			return
		}
		node.value = value
	}
	func createNode(value int) *treeNode  {
		return &treeNode{value: value}
	}
	func (node *treeNode) traverse() {
		if node == nil {
			return
		}
		node.left.traverse()
		node.print()
		node.right.traverse()
	}
	func nodesFun()  {
		var  root treeNode
		root = treeNode{value: 3}
		root.left = &treeNode{}
		root.right = &treeNode{5,nil,nil}
		root.right.left = new(treeNode)
		root.left.right = new(treeNode)
		nodes := []treeNode{
			{value: 3},
			{},
			{6,nil,&root},
		}
		fmt.Println(nodes)	// [{3 <nil> <nil>} {0 <nil> <nil>} {6 <nil> 0xc00011a018}]
		root.print()	// 打印结果:3
		fmt.Println()
		root.right.left.setValue(4)	// 打印结果:4
		root.right.left.print()
		fmt.Println()
		root.print()	// 3
		root.setValue(100)
		fmt.Println()
		var pRoot *treeNode
		pRoot.setValue(200)	// Setting value to nil node
		pRoot = &root
		pRoot.print()	// 100
		fmt.Println()
		root.traverse()	// 0010045
	
	}
	func main() {
		nodesFun()
		fmt.Println()
	}	
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值