刚刚学习到Go的接口部分,希望对之前的基础部分(struct、slice、map)做一个简单的总结!
希望各位Go语言方面的大佬给一点意见,非常感谢!!!
编写过程中存在的一些疑惑:
- TreeNode结构中定义的Child()和SetChild()方法都是返回的接口本身,但是在结构体定义以及实现的时候感觉用着有点别扭,没有Java那么顺畅(可能是Go还不熟悉)。。。
package main
import (
"fmt"
"strconv"
)
// TreeNode 节点接口
type TreeNode interface {
// Id 节点ID
Id() int
// Pid 父节点ID
Pid() int
// Name 节点名称
Name() string
// Child 获取子节点切片
Child() *[]*TreeNode
// String 节点打印方法
String() string
}
// BuildTree 构建树结构
func BuildTree(nodes []TreeNode, root int) []TreeNode {
collect := make(map[int]*TreeNode, len(nodes))
for idx, elem := range nodes {
collect[elem.Id()] = &nodes[idx]
}
var result []TreeNode
for key, val := range collect {
if (*val).Pid() == root {
result = append(result, *val)
} else {
*(*collect[(*val).Pid()]).Child() = append(*(*collect[(*val).Pid()]).Child(), collect[key])
}
}
return result
}
// Menu 菜单,实现节点接口以此构建菜单树
type Menu struct {
id int //节点ID
pid int //父节点ID
name string //节点名称
child []*TreeNode //子节点
}
func (menu