为go结构中的指针类型赋值
Assigning values to pointer types in a go struct
为了在尝试将数据结构输入数据库行时处理空值(使用 goqu),我定义了一个类似于
的结构
type datain struct {
id *float32 `db:"id"`
tempr *float32 `db:"temperature"`
}
因为这些都来自字符串,所以我创建了一个函数
func stringToFloat32(instr string) float32 {
value, err := strconv.ParseFloat(instr, 32)
if err != nil {
log.Crit("error converting to float", "stringToFloat32", err)
}
return float32(value)
}
将字符串转换为 float32... 但是当我尝试使用
var datastruct datain
*datastruct.id = stringToFloat32("1234.4")
我收到错误、无效地址或零指针取消引用
哪一种对我来说有意义.. 但尽我所能,我无法弄清楚如何在这些结构字段中放置一个值(如果存在的话)。
当输入的 csv 字符串中的某个字段没有值时,我正在尝试使用此机制允许空值。
也许我这样做很困难?我肯定有地方语法错误。
进一步挖掘.. 似乎我可能需要一个 new() 函数来为每个指针分配一个真正的变量...不过仍然忍不住觉得这样做很困难。
当你定义一个 datain
变量而不进行任何初始化时,id
的值为 nil,这意味着你不能 de-reference 它。
var datastruct datain
id := stringToFloat32("1234.4")
datastruct.id = &id
为了在尝试将数据结构输入数据库行时处理空值(使用 goqu),我定义了一个类似于
的结构type datain struct {
id *float32 `db:"id"`
tempr *float32 `db:"temperature"`
}
因为这些都来自字符串,所以我创建了一个函数
func stringToFloat32(instr string) float32 {
value, err := strconv.ParseFloat(instr, 32)
if err != nil {
log.Crit("error converting to float", "stringToFloat32", err)
}
return float32(value)
}
将字符串转换为 float32... 但是当我尝试使用
var datastruct datain
*datastruct.id = stringToFloat32("1234.4")
我收到错误、无效地址或零指针取消引用 哪一种对我来说有意义.. 但尽我所能,我无法弄清楚如何在这些结构字段中放置一个值(如果存在的话)。
当输入的 csv 字符串中的某个字段没有值时,我正在尝试使用此机制允许空值。
也许我这样做很困难?我肯定有地方语法错误。
进一步挖掘.. 似乎我可能需要一个 new() 函数来为每个指针分配一个真正的变量...不过仍然忍不住觉得这样做很困难。
当你定义一个 datain
变量而不进行任何初始化时,id
的值为 nil,这意味着你不能 de-reference 它。
var datastruct datain
id := stringToFloat32("1234.4")
datastruct.id = &id