Go--List

心恩惠动 / 2023-08-30 / 原文

什么是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"]}]