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