تفاصيل ونصائح

دالة json.Unmarshal تقبل مطابقة مفاتيح الكائنات دون حساسية لحالة الأحرف

مثلاً، تطبع الشيفرة التالية bar بدلاً من foo.

package main

import (
	"encoding/json"
	"fmt"
)

type T struct {
	HTML string `json:"HTML"`
}

var s = `{"HTML": "foo", "html": "bar"}`

func main() {
	var t T
	if err := json.Unmarshal([]byte(s), &t); err != nil {
		fmt.Println(err)
		return
	}
	fmt.Println(t.HTML) // bar
}

ينص توثيق دالة json.Unmarshal على "تفضيل المطابقة التامة لكنها تقبل أيضاً مطابقة غير حساسة لحالة الأحرف". لذا شخصياً، أعتقد أن هذا خطأ في تنفيذ دالة json.Unmarshal، لكن فريق Go الأساسي لا يرى ذلك.