私がnilインターフェースを省略しようとしているが、ここで omitemptyは
package main
import (
"fmt"
"encoding/json"
)
type MyStruct struct{
Val interface{} `json:"val,omitempty"`
}
func main() {
var s []string
s = nil
m := MyStruct{
Val : s,
}
b, _:= json.Marshal(m)
fmt.Println(string(b))
}
は、なぜそれが治療されていない
{"val":null}
これは、出力遊び場リンクhttps://play.golang.org/p/cAE1IrSPgm ある値JSONの値はnilインターフェースを省略していませんそれは空の値としてですか?これらのゼロ値をjsonから省略する方法はありますか? documentationから
を行うことができます 'この例ではm.Val'はゼロではありません。 –
'nil' *を指す変数は、' nil'値*を持つ変数を指す*変数と同じではありません。 Cerise Limonが指摘しているように、後者は 'nil 'ではなく、' m.Val'が変数 's'を指しています。 'm'を' m:= MyStruct {Val:nil} 'と定義すると、省略されます。 – putu
@putu私は理解しています。しかし、私の場合、変数sへの値はデータベースクエリから来て、ValをValに割り当てる必要があります。だから、それが直接の割り当てになることはできません。 – Anuruddha