11、go语言的包、封装、组合

1、go语言中,每个目录为一个包
2、main包包含可执行入口
3、为结构定义的方法必须放在同一个包内,可以在不同的文件中

封装

go语言中结构、常量、方法首字母大写,代表public,首字母小写代表private
public的可以支持其他包的调用

如何扩充系统类型或者别人的类型

1、定义别名
2、使用组合

组合例子:
http://c.biancheng.net/view/5128.html
tree包

package tree
import "fmt"
type Node struct {
	Value int
	Left, Right *Node
}
func (no *Node) SetValue(value int){
	no.Value = value
}
func (no *Node) Traverse(){
	if no == nil {
		return
	}
	no.Left.Traverse()
	no.Print()
	no.Right.Traverse()
}
func CreateNode(value int) *Node {
	return &Node{ value, nil, nil}
}
func (no Node)Print(){
	fmt.Printf("%d ",no.Value)
}

main包中使用组合扩展

package main

import (
	"fmt"
	tree "tree"
)
type MyTreeNode struct {
	node *tree.Node
}
func (myNode *MyTreeNode) postOrder() {
	if myNode == nil || myNode.node == nil{
		return
	}
	left := MyTreeNode{myNode.node.Left}
	right := MyTreeNode{myNode.node.Right}

	left.postOrder()
	right.postOrder()
	myNode.node.Print()
}
func main() {
	var root tree.Node
	root = tree.Node{3,nil,nil}
	root.Left = &tree.Node{999,nil,nil}
	root.Right = &tree.Node{5, nil, nil}
	root.Right.Left = new(tree.Node)
	root.Left.Right = tree.CreateNode(2)
	root.Right.Left.SetValue(4)

	root.Traverse()
	fmt.Println()
	myRoot := MyTreeNode{&root}
	myRoot.postOrder()
	fmt.Print()
}

组合

Go可以通过组合另一个类型来“继承”它的所有行为,十分直观。
go的组合表达了一种Student是个人,所以Student包含了Person的所有行为,即人能做的事情Student就能做,Student骨子里也是个人

package main
type Person struct {
}
func (p *Person) Say(){
	println("I am a person")
}
type Student struct {
	Person
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值