Golang通过sql.nullString设置reflect.value

pnwntuvh  于 2022-12-07  发布在  Go
关注(0)|答案(1)|浏览(167)

如何通过inData.SourceId(类型为String)设置item.SourceId(类型为sql.NullString)?我不知道如何编写红色块

中的代码
我在Using reflect, how do you set the value of a struct field?中找到了reflect.ValueOf(&foo).Elem().Field(0).SetInt(321)sql.NullString是否有类似SetInt的内容?

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() != ""}

    }
}
velaa5lx

velaa5lx1#

if itemType == "sql.NullString" {
    itemValue.Set(reflect.ValueOf(sql.NullString{String: inDataValue.String(), Valid: inDataValue.String() != ""}))
}

相关问题