2015-06-25 10 views
16

Ponieważ pusty ciąg jest wartością zerową/domyślną dla Golang string, postanowiłem zdefiniować wszystkie takie pola, jak interface{}. na przykładPrzypisywanie pustej wartości do pól JSON zamiast pustych ciągów znaków w Golang

type student struct { 
    FirstName interface{} `json:"first_name"` 
    MiddleName interface{} `json:"middle_name"` 
    LastName interface{} `json:"last_name"` 
} 

Aplikacja przesyłam moje dane oczekiwać null zamiast pusty ciąg, jeśli wartość nie jest dostępny dla tej konkretnej dziedzinie.

Czy to jest właściwe podejście, czy też ktoś może wskazać mi coś lepszego niż to.

+1

użyć 'json: null' –

+3

Jak o wskaźnik: '* ciąg'? Również powiązane: [Jak mogę reprezentować opcjonalny ciąg w ruchu?] (Http://stackoverflow.com/questions/30731687/how-do-i-represent-an-optional-string-in-go) – icza

+0

@AryehArmon mógłby podajesz link do dokumentów, w których jest określony ten tag? Nie mogę tego znaleźć. – thwd

Odpowiedz

30

W json package documentation:

wartości wskaźnika zakodować jako wartość wskazał. Wskaźnik zerowy koduje jako obiekt zerowy JSON.

Więc można przechowywać wskaźnik do łańcucha który zostanie zakodowany jako ciąg jeśli nie zera i będzie kodowany jako „null” jeśli nil

type student struct { 
    FirstName *string `json:"first_name"` 
    MiddleName *string `json:"middle_name"` 
    LastName *string `json:"last_name"` 
} 
+1

Próbowałem tego podejścia. Czy to podejście i interfejs mają przewagę nad sobą? – Prashant

+2

Powiedziałbym, czytelność i spójność. Jest oczywiste, że za pomocą wskaźnika do podejścia łańcuchowego wiesz, czym jest var. Korzystanie z interfejsu mówi kompilatorowi, że FirstName może być wszystkim i pozostawia miejsce na błędy – Asdine

Powiązane problemy