Go--List
什么是List
List是一种有序的集合,可以包含任意数量的元素。与数组相比,list的长度可以动态调整,可以随时添加或删除元素,类似于切片
在go中,List是一个双向链表的实现。
实例
package main import ( "container/list" "fmt" ) type User struct { id int name string } func main() { l := list.New() //创建一个list l.PushBack(1) //插入链表的最后一个位置 l.PushBack(2) l.PushBack(3) l.PushFront(4) //插入链表的第一个位置 l.Remove(l.Front().Next()) //删除最后一个元素 i := 1 for e := l.Front(); e != nil; e = e.Next() { fmt.Printf("元素%d:%d\n", i, e.Value) i++ } //当list中元素为struct时 ll := list.New() item1 := User{id: 101, name: "name1"} item2 := User{id: 102, name: "name2"} ll.PushBack(item1) ll.PushBack(item2) a := 1 for e := ll.Front(); e != nil; e = e.Next() { fmt.Printf("元素%d: id:%d, name:%s\n", a, e.Value.(User).id, e.Value.(User).name) //先转义后使用 a++ } }
输出结果:
元素1:4 元素2:2 元素3:3 元素1: id:101, name:name1 元素2: id:102, name:name2
在go中实际使用
package main import ( "encoding/json" "fmt" ) type User struct { id int name string } type notifyParams struct { Type string `json:"type"` Values []string `json:"values"` } func main() { //实例化一个list var al []interface{} //或者使用: al := make([]interface{}, 0) al = append(al, "t1") //使用append添加元素 al = append(al, 1) al = append(al, "2") fmt.Println(al) //在struct中使用时 aList := make([]User, 0) aList = append(aList, User{id: 555, name: "wang"}) aList = append(aList, User{id: 444, name: "wan"}) fmt.Println(aList) for k, v := range aList { //遍历list fmt.Println(k, v) } notifyList := make([]notifyParams, 0) var arrs notifyParams arrs.Type = "test" arrs.Values = append(arrs.Values, "t1") arrs.Values = append(arrs.Values, "t2") arrs.Values = append(arrs.Values, "t3") notifyList = append(notifyList, arrs) fmt.Println(notifyList) s1, _ := json.Marshal(notifyList) //序列化list,变成json格式 fmt.Println(string(s1)) }
输出结果
[t1 1 2] [{555 wang} {444 wan}] 0 {555 wang} 1 {444 wan} [{test [t1 t2 t3]}] [{"type":"test","values":["t1","t2","t3"]}]