最新版的goland好像不用配置额外的环境变量,但是命令行模式需要设置环境变量
package main
import (
"encoding/json/v2"
"fmt"
"log"
)
// User 演示Go 1.25 JSON v2的新特性
type User struct {
Name string `json:"name"`
Age int `json:"age"`
Email string `json:"email"`
}
func main() {
// 1. 演示新的JSON v2包的基本使用
user := User{
Name: "张三",
Age: 30,
Email: "zhangsan@example.com",
}
// 序列化示例
data, err := json.Marshal(user)
if err != nil {
log.Fatalf("序列化失败: %v", err)
}
fmt.Println("序列化结果:", string(data))
// 2. 演示严格的UTF-8验证(v2默认行为)
invalidUTF8 := []byte(`{"name": "张\xff三"}`)
var invalidUser User
if err := json.Unmarshal(invalidUTF8, &invalidUser); err != nil {
fmt.Println("检测到无效UTF-8错误:", err)
}
// 3. 演示大小写敏感的字段匹配(v2新特性)
caseSensitiveJSON := []byte(`{"Name": "李四", "age": 25}`)
var caseUser User
if err := json.Unmarshal(caseSensitiveJSON, &caseUser); err != nil {
fmt.Println("字段大小写不匹配错误:", err)
}
fmt.Printf("反序列化结果(注意Name字段因大小写不匹配未被正确解析): %+v\n", caseUser)
}
// 注意: 运行此代码需要设置环境变量 GOEXPERIMENT=jsonv2
// powershell用 $env:GOEXPERIMENT="jsonv2"
// 编译命令: GOEXPERIMENT=jsonv2 go run main.go