Go語言中面向對象-結構體和方法

主要講解Go語言中面向對象中的 結構體和方法

主要知識點:node

  • Go語言僅支持封裝,不支持繼承和多態,Go語言的設計者認爲Go語言面向對象不須要繼承和多態,只須要封裝就夠了,而繼承和多態經過接口來實現就能夠了,面向接口編程在面向對象領域也是一種趨勢
  • Go語言中沒有 class、只有 struct,封裝就是結構體對結構體進行封裝。
  • Go語言中沒有構造方法,在初始化結構體時,提供了多種初始化方式。
  • 若是業務須要能夠經過自定義工廠方法,實現構造方法的功能
  • 結構體對象可能在棧上,也可能在堆上,此時咱們並不須要知道,當編譯器以爲不須要返回地址的時候則在棧上建立,若是須要返回地址,則在堆上建立。
  • 熟悉爲結構體定義方法,定義方法是分爲  值接受者 和 指針接收者,只有指針接受者 才能夠改變內容,若是結構體過大,也建議使用指針接受者

如下爲代碼示例:編程

package main

import "fmt"

//實體 結構體 定義
type treeNode struct {
	Value       int
	Left, Right *treeNode
}

//自定義工廠方法 實現構造函數功能
func createTreeNode(value int) *treeNode {
	return &treeNode{Value:value}
	//此處返回一個局部變量地址給外部使用,若是在 C++ 中,這是一個錯誤寫法,會致使錯誤
	//但在 Go中 不會出現問題
}

//爲結構體定義方法,有一個接收者的概念,這個方法是 值接受者
// 爲treeNode 定義方法,node至關於 Java 中的 this
func (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()
}
相關文章
相關標籤/搜索