golang 實現選單樹的生成

2021-09-28 12:18:21 字數 3068 閱讀 6786

2 使用

3 測試效果

golang實現選單樹的生成,包括選單節點的選中狀態、半選中狀態,選單的搜尋。

generatetree自定義的結構體實現inode介面後呼叫此方法生成樹結構。

findrelationnodealltree中查詢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...