Действительно ли тег json в структуре действительно необходим для маршалинга? - PullRequest
0 голосов
/ 04 октября 2019

Мне было интересно узнать, есть ли способ получить это:

type Example struct {
  Name    string   `json:"name"`
  Value   string   `json:"value"`
}

стать таким:

type Example struct {
  Name    string
  Value   string
}

и по-прежнему разрешать JSON маршалинг / демаршалинг? Есть ли библиотека или способ автоматически принимать или вводить эти теги без необходимости явного указания в каждом структурном поле?

1 Ответ

0 голосов
/ 04 октября 2019

По умолчанию он будет закодирован как

{ 
    "Name": "",
    "Value": ""
}

Но go написан на ходу, и если вы действительно хотите использовать строчные буквы без тегов, вы можете просто 'fork' encoding/json package, воссоздать его как свойсобственный пакет и измените поведение в encode.go (строка 1151 в версии 1.13):

// Record found field and index sequence.    
if name != "" || !sf.Anonymous || ft.Kind() != reflect.Struct {
        tagged := name != ""
        if name == "" {
           name = sf.Name <-- here, for example to strings.ToLower(sf.Name)
        }
        ....

Я не рекомендую вам это делать, но это работает:)

...