go panic interface conversion interface {} is float64, not int

package main

import (
	"encoding/json"
	"log"
)

type Student struct {
	Sex string `json:"sex"`
	Age int `json:"age"`
}

func main() {
	s1 := &Student{
		Sex: "s1",
		Age: 20,
	}
	str1, err := json.Marshal(s1)
	if err != nil {
		log.Fatal(err)
	}

	var m map[string]interface{}
	err = json.Unmarshal(str1, &m)
	if err != nil {
		log.Fatal(err)
	}

	log.Printf("%d\n", m["age"].(int))
}

json反序列化成map时,数字默认是float64类型,不是int。

log.Printf("%d\n", int(m["age"].(float64)))

推荐指定结构体指针接收反序列化结果,不需要类型断言,逻辑更清晰。

posted on 2024-09-26 20:23  王景迁  阅读(5)  评论(0编辑  收藏  举报

导航