"non-point map" 错误通常是由于在使用 json.Marshal 函数时,将非指针的 map 作为参数传递导致的。在 Go 语言中,json.Marshal 函数只能接受指针类型的参数,以便在序列化过程中可以修改参数的值。

要解决这个错误,可以将 map 声明为指针类型,或者使用结构体来包装 map。下面是两个示例:

示例 1:使用指针类型的 map

package main

import (
	"encoding/json"
	"fmt"
)

func main() {
	m := make(map[string]int)
	m["foo"] = 42

	// 使用指针类型的 map
	ptr := &m

	// 序列化为 JSON
	data, err := json.Marshal(ptr)
	if err != nil {
		fmt.Println("序列化失败:", err)
		return
	}

	fmt.Println(string(data))
}

示例 2:使用结构体包装 map

package main

import (
	"encoding/json"
	"fmt"
)

type Data struct {
	Map map[string]int `json:"map"`
}

func main() {
	m := make(map[string]int)
	m["foo"] = 42

	// 使用结构体包装 map
	data := Data{Map: m}

	// 序列化为 JSON
	jsonData, err := json.Marshal(data)
	if err != nil {
		fmt.Println("序列化失败:", err)
		return
	}

	fmt.Println(string(jsonData))
}

以上示例中,我们将 map 声明为指针类型或者使用结构体包装 map,然后将其传递给 json.Marshal 函数进行序列化,就可以避免 "non-point map" 错误

golang json non-point map 是什么错误

原文地址: https://www.cveoy.top/t/topic/isU0 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录