2 使用
3 測試效果
golang
實現選單樹的生成,包括選單節點的選中狀態、半選中狀態,選單的搜尋。
generatetree
自定義的結構體實現inode
介面後呼叫此方法生成樹結構。
findrelationnode
在alltree
中查詢nodes
中節點的所有父子節點 返回respnodes
(包含nodes
, 跟其所有父子節點)
// converttoinodearray 其他的結構體想要生成選單樹,直接實現這個介面
type inode inte***ce
// isroot 判斷當前節點是否是頂層根節點
isroot()
bool
}
go get github.com/azhengyongqin/golang-tree-menu
// 定義我們自己的選單物件
type systemmenu struct
func
(s systemmenu)
gettitle()
string
func
(s systemmenu)
getid()
intfunc
(s systemmenu)
getfatherid()
intfunc
(s systemmenu)
getdata()
inte***ce
func
(s systemmenu)
isroot()
bool
type systemmenus [
]systemmenu
// converttoinodearray 將當前陣列轉換成父類 inode 介面 陣列
func
(s systemmenus)
converttoinodearray()
(nodes [
]inode)
return
}
// 模擬獲取資料庫中所有選單,在其它所有的查詢中,也是首先將資料庫中所有資料查詢出來放到陣列中,
// 後面的遍歷遞迴,都在這個 allmenu中進行,而不是在資料庫中進行遞迴查詢,減小資料庫壓力。
allmenu :=
systemmenu,,
,,,,
,}
// 生成完全樹
// 模擬選中 '資產' 選單
// 模擬從資料庫中查詢出 '裝置'
device :=
systemmenu
// 查詢 `裝置` 的所有父節點
List遞迴生成選單樹
利用遞迴使從資料庫取出的選單表資料轉換成選單樹的結構 生成方法是給list每個元素新增乙個children物件,這個物件可以存放此選單的子選單項 list pmenu newarraylist 迴圈找所有一級選單 pid 0 for int i 0 i menulist.size i 遍歷所有選單項...
golang生成隨機函式的實現
golang生成隨機數可以使用math rand包,示例如下 package main import fmt math rand func main 而發現這種情況,每次執行的結果一樣.修改如下 package main import fmt time math rand func main 而這種...
golang實現無限級選單 beego框架下
資料表如下 table structure for auth menu drop table if exists auth menu create table auth menu id int 10 unsigned not null auto increment,pid int 11 not nu...