import ( "fmt" "go.uber.org/thriftrw/wire" ) func main() { value := wire.NewValueStruct( wire.Struct{Fields: []wire.Field{ {ID: 1, Value: wire.NewValueBool(true)}, {ID: 2, Value: wire.NewValueI32(42)}, }}, ) if v, err := value.GetStruct(); err == nil { fmt.Println(v.Fields[0].Value.GetBool()) fmt.Println(v.Fields[1].Value.GetI32()) } }
import ( "fmt" "go.uber.org/thriftrw/wire" ) type User struct { Name string Age int32 } func ToValue(u User) wire.Value { return wire.NewValueStruct( wire.Struct{Fields: []wire.Field{ {ID: 1, Value: wire.NewValueString(u.Name)}, {ID: 2, Value: wire.NewValueI32(u.Age)}, }}, ) } func FromValue(v wire.Value) (User, error) { if s, err := v.GetStruct(); err != nil { return User{}, err } else { return User{ Name: s.Fields[0].Value.GetString(), Age: s.Fields[1].Value.GetI32(), }, nil } } func main() { user := User{"John", 42} value := ToValue(user) if u, err := FromValue(value); err == nil { fmt.Println(u.Name) fmt.Println(u.Age) } }This example defines a Go struct User and two conversion functions ToValue and FromValue that convert between User and wire.Value. It demonstrates how to use GetStruct to extract field values from a Thrift value.