猿问

sql:列索引 38 上的扫描错误:目标不是指针

使用 Golang 和内置database/sql库以及 postgreslib/pq库,我试图从某些记录中具有一些空值的数据库中读取数据。代码可以编译,但是当我尝试运行它时,出现以下错误。


sql: Scan error on column index 38: destination not a pointer

这是我的代码:


  rows, err := db.Query(`SELECT * FROM observations WHERE profile_id=$1 AND year=$2 AND month=$3`, id, date.Year(), int(date.Month()))

  if err != nil {

    log.Fatal(err)

  }

  defer rows.Close()

  for rows.Next() {

    var id sql.NullInt64

    var year sql.NullInt64

    var month sql.NullInt64

    var day_of_week sql.NullInt64 

    var hour sql.NullInt64

    var profile_id sql.NullInt64 

    var created_at time.Time 

    var updated_at time.Time

    var banking sql.NullFloat64

    var hlt_pro sql.NullFloat64 

    var sup_shp sql.NullFloat64 

    var aff_con sql.NullFloat64 

    var biz_trv sql.NullFloat64 

    var investing sql.NullFloat64 

    var day_com sql.NullFloat64 

    var unique_emin sql.NullFloat64 

    var no_group sql.NullFloat64 

    var movie_goer sql.NullFloat64 

    var luxury_shopper sql.NullFloat64 

    var sports_fan sql.NullFloat64 

    var aland sql.NullInt64

    var awater sql.NullInt64

    var tractce sql.NullString

    var geoid sql.NullString

    var median_income sql.NullInt64 

    var total_population sql.NullInt64 

    var white sql.NullInt64 

    var black sql.NullInt64 

    var native_american sql.NullInt64 

    var asian sql.NullInt64 

    var pacific_islander sql.NullInt64 

    var other sql.NullInt64 

    var two_plus sql.NullInt64 

    var two_plus_question sql.NullInt64 

    var confused sql.NullInt64 

    var median_age sql.NullFloat64

    var count sql.NullFloat64

    var latitude sql.NullString

    var longitude sql.NullString

我正在使用sql.NullType,这与执行相同*type。这是处理空情况的一种努力,它似乎适用于大多数列,但我不确定为什么它说“目标不是指针”。另外,我不知道哪个变量是问题所在。有任何想法吗?


LEATH
浏览 432回答 1
1回答

莫回无

您的最后一个参数经度没有通过地址传递。更改为 &longitude作为旁注,使用“select *”并假设列位置是可预测的,这是导致错误的一个秘诀。您可能应该命名您选择的所有列,以防将来的表更改导致列排序问题。
随时随地看视频慕课网APP

相关分类

Go
我要回答