猿问

如何使用Scan接口将数据库中读取的字符串小写

我想在从数据库中读取字符串时将其小写。我知道这可以在 SQL 中完成,但这是我使用 go 的第一天,这更多是概念证明(和对 go 的理解)而不是实际需求。


使用 Scan 接口从数据库读取时,类型 EmailAddress 应始终为小写,这会导致恐慌:接口转换:接口是 []uint8,而不是字符串


package main


import (

  "database/sql"

  "github.com/kisielk/sqlstruct"

  _ "github.com/lib/pq"

  "log"

  "strings"

)


type EmailAddress string


func (g *EmailAddress) Scan(src interface{}) error {

  *g = EmailAddress(strings.ToLower(src.(string)))

  return nil

}


type User struct {

  Id          int

  MobilePhone string `sql:"mobile_phone"`

  Email       EmailAddress

}


func main() {

  db, _ := sql.Open("postgres", "host=localhost dbname=test sslmode=disable")

  defer db.Close()


  rows, _ := db.Query("SELECT id, mobile_phone, COALESCE(email,'') as email FROM users limit 5")


  for rows.Next() {

    var t User

    _ = sqlstruct.Scan(&t, rows)

    log.Printf("%+v\n", t)

  }

}


SMILET
浏览 198回答 1
1回答
随时随地看视频慕课网APP

相关分类

Go
我要回答