package main

import (

func main() {
        type T1 struct {
                X int `json:"foo"`
        type T2 struct {
                X int `json:"bar"`
        var v1 T1
        var v2 T2
        v1 = T1(v2) // now legal

        var data = []byte(`{"foo": 1,"bar": 2}`)
        _ = json.Unmarshal(data, &v1)
        fmt.Printf("%+v\n", v1)

        _ = json.Unmarshal(data, &v2)
        fmt.Printf("%+v\n", v2)

        v1 = T1(v2) // now legal
        fmt.Printf("%+v\n", v1)


     $ go version
    go version go1.7.4 darwin/amd64 
    $ go run main.go 
    ./main.go:17: cannot convert v2 (type T2) to type T1
    ./main.go:26: cannot convert v2 (type T2) to type T1


$ go run main.go

PlayGround と変換されるようになりました。 タグだけ変えたいのに、、、くそーがなくなったのはいいことですね


When explicitly converting a value from one struct type to another, as of Go 1.8 the tags are ignored. Thus two structs that differ only in their tags may be converted from one to the other: 明示的にある構造体の型から別の型に値を変換するとき、Go 1.8のようにタグは無視されます。したがって、タグだけが異なる2つの構造体は、一方から他方へと変換される可能性があります。