思考:go语言不支持继承与多态的优点与缺点是什么
- go语言只支持封装,不支持继承与多态
- go语言没有class,只有struct
- go语言如何实现方法
结构的定义
type treeNode struct {
value int
left, right *treeNode
}
示例1
package main
import "fmt"
type treeNode struct {
value int
left,right *treeNode
}
func main(){
var root treeNode
fmt.Printf("%v",root)
}
输出:
{0 <nil> <nil>}
示例2
思考:
go语言函数内部,为什么可以返回局部变量
go语言的局部变量是分配在栈上还是堆上
go语言的垃圾回收机制是怎样的
自定义工厂函数
函数返回了局部变量
3
0 5
2 0
package main
import "fmt"
type treeNode struct {
value int
left,right *treeNode
}
func createTreeNode(value int) *treeNode {
//函数内返回了一个局部变量
return &treeNode{value:value}
}
func main(){
var root treeNode
root = treeNode{value:3}
root.left = &treeNode{}
root.right = &treeNode{5,nil,nil}
root.right.left = new(treeNode)
//使用工厂函数创建了一个node
root.left.right = createTreeNode(2)
fmt.Printf("%v",root)
}
示例3
go语言的方法(接收者)
package main
import "fmt"
type treeNode struct {
value int
left,right *treeNode
}
func (node treeNode) Print(){
fmt.Printf("%v\n",node.value)
}
func (node *treeNode) SetValue(value int){
node.value = value
}
func (node *treeNode) traverse(){
//中序遍历
if node == nil {
return
}
node.left.traverse()
node.Print()
node.right.traverse()
}
func createTreeNode(value int) *treeNode {
return &treeNode{value:value}
}
func main(){
var root treeNode
root = treeNode{value:3}
root.left = &treeNode{}
root.right = &treeNode{5,nil,nil}
root.right.left = new(treeNode)
root.left.right = createTreeNode(2)
root.left.SetValue(10)
root.left.Print()
root.Print()
root.traverse()
}
网友评论