go面相对象的特性
仅支持封装,不支持继承和多态
没有class,只有struct
go语言没有构造函数这一说法,也不需要构造函数,如果某些时候的确需要控制他的构造,我们可以使用自定义工厂函数。
package tree
import "fmt"
type Nodestruct {
Value int
Left, Right *Node
}
func (node Node) Print() {
fmt.Print(node.Value," ")
}
func (node *Node) SetValue(value int) {
if node == nil {
fmt.Println("Setting Value to nil " +
"node. Ignored.")
return
}
node.Value = value
}
func CreateNode(value int) *Node {
return &Node{Value: value}
}
为结构定义方法
显示定义和命名方法接收者
只有使用指针作为方法的接收者,才可以改变结构内容。
nil指针也可以调用方法。(一般会在为结构定义的方法里面做判断)