Encoding
encoding/json: 非公開フィールドはタグがあっても出力しない
encoding/jsonは小文字で始まる非公開フィールドをJSONの対象にしません。
Sourceunexported.go
Go 1.22
package encodingexample
import "encoding/json"
type Account struct {
Name string `json:"name"`
secret string `json:"secret"`
}
func MarshalAccount() (string, error) {
encoded, err := json.Marshal(Account{Name: "gopher", secret: "hidden"})
return string(encoded), err
}Testunexported_test.go
Go 1.22
package encodingexample
import "testing"
func TestEncodingJsonは非公開フィールドを出力しない(t *testing.T) {
encoded, err := MarshalAccount()
if err != nil {
t.Fatal(err)
}
if encoded != `{"name":"gopher"}` {
t.Fatalf("MarshalAccount() = %s", encoded)
}
}01Assertion
このテストで確認できること
- Nameと非公開のsecretを持つstructをMarshalする
- jsonタグを付けたsecretは出力されない
DTOのフィールドを小文字で定義すると、タグを追加してもJSONへ現れません。公開するデータを意図的に選ぶ一方で、APIレスポンスの欠落として見落とさないようテストします。
OBSERVED RESULT
Account{Name: "gopher", secret: "hidden"}
→ {"name":"gopher"}