英文:
Golang set reflect.Value by sql.NullString
问题
如何通过inData.SourceId(类型为String)设置item.SourceId(类型为sql.NullString)?我不知道如何在红色块中编写代码。
我在https://stackoverflow.com/questions/6395076/using-reflect-how-do-you-set-the-value-of-a-struct-field 中找到了reflect.ValueOf(&foo).Elem().Field(0).SetInt(321)
。是否有类似于SetInt
用于sql.NullString
的方法?
type InDataType struct {
Id string
SourceId string
}
type ItemType struct {
Id string
SourceId sql.NullString
}
setField(item, inData, "SourceId")
func setField(item interface{}, inData interface{}, fieldName string) {
// t := reflect.TypeOf(inData)
// fmt.Println(t)
itemValue := reflect.ValueOf(item).Elem().FieldByName(fieldName)
itemType := reflect.ValueOf(item).Elem().FieldByName(fieldName).Type().String()
fmt.Println(itemType, ",", itemValue)
inDataValue := reflect.ValueOf(inData).Elem().FieldByName(fieldName)
inDataType := reflect.ValueOf(inData).Elem().FieldByName(fieldName).Type().String()
fmt.Println(inDataType, ",", inDataValue)
if itemType == "sql.NullString" {
// itemValue = sql.NullString{String: inDataValue.Value().String(), Valid: inDataValue.String() != "";}
}
}
你可以尝试使用以下代码来设置item.SourceId
:
if itemType == "sql.NullString" {
itemValue.Set(reflect.ValueOf(sql.NullString{String: inDataValue.String(), Valid: inDataValue.String() != ""}))
}
这将根据inData.SourceId
的值设置item.SourceId
。请确保在使用此代码之前导入"database/sql"
和"reflect"
包。
英文:
How can I set item.SourceId(the type is sql.NullString) by inData.SourceId(the type is String) ?
I don't know how to write the code in the red block
I found reflect.ValueOf(&foo).Elem().Field(0).SetInt(321)
in https://stackoverflow.com/questions/6395076/using-reflect-how-do-you-set-the-value-of-a-struct-field. Is there something like SetInt
for sql.NullString
?
type InDataType struct {
Id string
SourceId string
}
type ItemType struct {
Id string
SourceId sql.NullString
}
setField(item, inData, "SourceId")
func setField(item interface{}, inData interface{}, fieldName string) {
// t := reflect.TypeOf(inData)
// fmt.Println(t)
itemValue := reflect.ValueOf(item).Elem().FieldByName(fieldName)
itemType := reflect.ValueOf(item).Elem().FieldByName(fieldName).Type().String()
fmt.Println(itemType, ",", itemValue)
inDataValue := reflect.ValueOf(inData).Elem().FieldByName(fieldName)
inDataType := reflect.ValueOf(inData).Elem().FieldByName(fieldName).Type().String()
fmt.Println(inDataType, ",", inDataValue)
if itemType == "sql.NullString" {
// itemValue = sql.NullString{String: inDataValue.Value().String(), Valid: inDataValue.String() != ""}
}
}
答案1
得分: 0
如果 itemType == "sql.NullString" {
itemValue.Set(reflect.ValueOf(sql.NullString{String: inDataValue.String(), Valid: inDataValue.String() != ""}))
}
英文:
if itemType == "sql.NullString" {
itemValue.Set(reflect.ValueOf(sql.NullString{String: inDataValue.String(), Valid: inDataValue.String() != ""}))
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论