gặp khó khăn khi làm việc với các trường struct bằng reflect
gói. cụ thể là chưa tìm ra cách đặt giá trị trường.
kiểu t struct {fi int; chuỗi fs} var rt = t {123, "jblow"} var i64 int64 = 456
lấy Tên của trường tôi - điều này có vẻ hoạt động
var field = reflect.TypeOf(r).Field(i).Name
nhận giá trị của trường i dưới dạng a) interface {}, b) int - điều này có vẻ hoạt động
var iface interface{} = reflect.ValueOf(r).Field(i).Interface()
var i int = int(reflect.ValueOf(r).Field(i).Int())
giá trị cài đặt của trường i - thử một - hoảng sợ
reflect.ValueOf(r).Field(i).SetInt( i64 )
hoảng sợ : phản ánh.Value · SetInt sử dụng giá trị thu được bằng cách sử dụng trường chưa được báo cáo
giả sử nó không thích các tên trường "id" và "name", vì vậy được đổi tên thành "Id" và "Name"
a) giả thiết này có đúng không?
b) nếu đúng, nghĩ là không cần thiết vì trong cùng một tệp / gói
cài đặt giá trị của trường i - thử hai (với tên trường được viết hoa) - hoảng sợ
reflect.ValueOf(r).Field(i).SetInt( 465 )
reflect.ValueOf(r).Field(i).SetInt( i64 )
hoảng sợ : phản ánh.Value · SetInt sử dụng giá trị không thể giải nén
Hướng dẫn dưới đây của @peterSO là kỹ lưỡng và chất lượng cao
Bốn. những công việc này:
reflect.ValueOf(&r).Elem().Field(i).SetInt( i64 )
tài liệu của anh ấy cũng như các tên trường phải có thể xuất được (bắt đầu bằng chữ in hoa)
reflect
để thiết lập dữ liệu là comments.gmane.org/gmane.comp.lang.go.general/35045 , nhưng thậm chí ở đó anh ta đã từngjson.Unmarshal
làm công việc bẩn thỉu thực sự