为什么我将map转换为json,map包含列表值,转换为json后什么都没有

func Test_JsonTtransfer(t *testing.T) {

    uid := "306"
    phoneList := list.New()
    phoneList.PushBack("18513622928")
    fmt.Println("phoneList=======", phoneList.Len())


    jsonPhoneList, err := json.Marshal(phoneList)
    if err != nil {
        fmt.Println("error:", err)
    }
    fmt.Println("jsonPhoneList=======", string(jsonPhoneList))

    idCardList := list.New()
    idCardList.PushBack("230405197608040640")

    request := make(map[string]interface{})
    request["uid"] = uid

    request["phones"] = phoneList

    request["id_cards"] = idCardList

    json, err := json.Marshal(request)
    if err != nil {
        fmt.Println("error:", err)
    }

    fmt.Println("json=======", json)
    fmt.Println("json=======", string(json))
}

Output:

D:/Sys/server/Go\bin\go.exe test -v golang-test/com/http/test -run ^Test_JsonTtransfer$ phoneList======= 1 jsonPhoneList======= {} json======= [123 34 105 100 95 99 97 114 100 115 34 58 123 125 44 34 112 104 111 110 101 115 34 58 123 125 44 34 117 105 100 34 58 34 51 48 54 34 125] json======= {"id_cards":{},"phones":{},"uid":"306"} ok golang-test/com/http/test 0.482s

Phones should be list values, but nothing. Help me.

Because the List type has no exported fields and the type does not implement the Marshalerinterface, List values always marshal to the text {}.

A simple fix is to use a slice instead of a list:

var phoneList []string
phoneList = append(phoneList, "18513622928")
fmt.Println("phoneList=======", len(phoneList)

playground example