5.2 包和封装
一、封装
通过函数命名来确定函数类型
函数-命名一般使用多单词驼峰方式命名
包-首字母大写:public(公共方法)
包-首字母小写:private(私有)
二、包
每个目录一个包
包名可以跟目录名不同,单每个目录只有一个包名
main包包含可执行入口,main函数必须在main包内
为结构定义的方法必须放在同一个包内
可以是不同的而文件
举例:
// main文件,4/tree/entry/entry.go
package main
import (
"fmt"
"imooc-learn/4/tree"
)
func main() {
// 创建treeNode,value为0,left与right为nil
var root tree.TreeNode
fmt.Println(root)
// 定义并赋值
root2 := tree.TreeNode{Value: 3}
root2.Left = &tree.TreeNode{}
root2.Right = &tree.TreeNode{5, nil, nil}
root2.Right.Left = new(tree.TreeNode)
root2.Left.Right = tree.CreateNode(2)
fmt.Println(root2)
// 赋值函数使用
root2.Right.Left.SetValue(4)
root2.Print()
//Print(root2)
fmt.Println()
// 切片中的定义
nodes := []tree.TreeNode{
{Value: 3},
{},
{6, nil, &root},
}
fmt.Println(nodes)
root2.Traveres()
}
// 类文件,4/tree/node.go
package tree
import "fmt"
// 二叉树节点结构
type TreeNode struct {
Value int
Left, Right *TreeNode
}
// 为结构体定义方法,接收方法是(node treeNode)
func (node TreeNode) Print() {
fmt.Println(node.Value)
}
// 第二种写法
func Print(node TreeNode) {
fmt.Println(node.Value)
}
// 赋值
func (node *TreeNode) SetValue(value int) {
node.Value = value
}
// 遍历
func (node *TreeNode) Traveres() {
if node == nil {
return
}
node.Left.Traveres()
node.Print()
node.Right.Traveres()
}
// 因为没有构造函数,所以可以使用工厂函数控制构造
func CreateNode(value int) *TreeNode {
return &TreeNode{Value: value}
}Last updated
Was this helpful?