golang笔记:unsupported driver -> Scan pair: <nil> -> *string

golang里,操作mysql数据库,使用查询语句的时候,一般的写法

rows, err := db.Query("SELECT name from table)

if err != nil {
    return
}

for rows.Next() {
    var name string
    err = rows.Scan(&name)
    if err != nil {
        return
    }
}

当查出来的字段有NULL的时候,就会报这样的错误unsupported driver -> Scan pair: <nil> -> *string

这又是由于Go语言对数据类型的严格限制。name的类型是string,所以只能接受string类型的值,而此处nil是为空的指针类型。最佳解决办法是——插入记录的时候不要有NULL存在。

但是根据我的数据库设计,有的联合查询语句必然会返回NULL值,因此另一种解决办法是将name字段定义为指针类型

rows, err := db.Query("SELECT name from table)

if err != nil {
    return
}

for rows.Next() {
    var name *string
    err = rows.Scan(&name)
    if err != nil {
        return
    }
}

其实只是改了name的类型定义一处,其余不变。当查询结果为NULL时,name的值为nil。当查询结果为字符串时,Go会将name的值赋为指向该字符串的指针,如此就能解决问题啦!

时间: 2024-11-08 08:56:53

golang笔记:unsupported driver -> Scan pair: <nil> -> *string的相关文章

《Javascript权威指南》学习笔记之十一:处理字符串---String类和正则表达式

一.正则表达式的基本语法 1.概念:正则表达式由普通字符和特殊字符(元字符)组成的文本模式,该模式描述在查找字符串主体时待匹配的一个或者多个字符串.正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配. 普通字符包括所有的大小写字母字符.所有数字.所有标点符号及一些特殊符号.普通字符本身可以组成一个正则表达式,也可以和元字符组合组成一个正则表达式:而元字符则具有特殊的含义,包括().[].{}./.^.$.*.+.?...|.-.?:.?=.?! 2.基本语法 3.优先权含义 二.使用

reason: &#39;*** -[NSURL initFileURLWithPath:]: nil string parameter&#39; 产生崩溃

今天碰见了一个错误,搞了好久查不到原因,很是坑: 原因很清楚,就是因为我的某些数据请求的路径为空,也就是路径有错误. 但是具体是什么路径出现错误了? 上面的原因并没有说出来,还需要接着向下面看. 看到报错的,而且很是眼熟的就是KIImagePager,而且还是和路径有关联的,很有可能就是这里出错了~ 先过去看看: 这两个类中,和KIImage相关,而且和路径有联系的地方只有上面这个方法了,先把这个方法里面内容注释掉,崩溃果然消失,但是为什么为出现这种原因呢? 原来是因为和我合作开发的工程师,修改

综合出现NSScanner: nil string argument libc++abi.dylib: terminat错误的解决方案

在开发中出现了这个错误,断点查找很久,没找到问题所在的代码,google下,发现了下面这几点会产生这个错误: 首先,顾名思义,错误原因是我们在调用某个方法的时候,传入了一个空字符串(注意区别于字符串内容为空)作为方法参数. 对某一个空数组使用objectAtIndex方法.不会报数组越界的错,而是NSScanner: nil string argument. 经过检查,我代码中如果字符串赋值,我一般都对nil做了一定处理,用@""代替,也未有数组越界,但是还是报这样的错误. 现在的信息

出现NSScanner: nil string argument libc++abi.dylib: terminate_handler unexpectedly threw an exception

出现了 2015-04-04 20:12:51.501 Pan大夫[5001:299704] NSScanner: nil string argument 2015-04-04 20:12:51.502 Pan大夫[5001:299704] NSScanner: nil string argument libc++abi.dylib: terminate_handler unexpectedly threw an exception 的错误信息的总结: 出现了这种错误我当时实在找不到好的方法,后

golang笔记——string

任何语言中,字符串操作API都是非常重要的,有些还是熟记比较好,当然如果记不住可以去看源码文件,不得不说GO语言源码看起来非常舒服. 字符串操作相关的API大多封装在 strings 包里,下面列一些常见的 func Count(s, sep string) int 获取指定子字符串的个数 func Contains(s, substr string) bool 判断是否包括某子字符串 func ContainsAny(s, chars string) bool 判断是否包括某字符串中的做任意一

【GoLang笔记】实例分析GoLang built-in数据结构map的赋值引用行为

备注1:本文旨在介绍Go语言中map这个内置数据结构的引用行为,并用实例来说明如何避免这种引用行为带来的"副作用". 备注2:文末列出的参考资料均来自GoLang.org官方文档,需翻墙访问. 1. map internals map是go中内置的数据结构,关于其语法规则,可以查看language specification中这里的说明,或者查看Effective Go中关于Maps的说明,此处略过. map的底层是用hashmap实现的(底层hashmap源码路径为src/pkg/r

Golang 笔记 1

一.Go语言基础 1. 基础 Go语言中的标识符必须以字母(Unicode字母,PHP/JS可以用中文作为变量名)下划线开头.大写字母跟小写字母是不同的:Hello和hello是两个不同的名字.  Go中有25个关键字: break default func interface select case defer go map struct chan else goto package switch const fallthrough if range type continue for imp

golang笔记(1)-数据库查询结果映射至结构体

通用的映射模式 query:="select id,name from user where id=?" //单个结构体ret:=&Activity{} DbClient().Find(query,activityId).Unique(ret)//结构体数组ret:=[]Activity{} DbClient().Find(query,activityId).List(&ret)   1.定义结构体 type Activity struct{ ID int64 `col

【GoLang笔记】遍历map时的key随机化问题及解决方法

之前的一篇笔记曾分析过,Go的map在底层是用hashmap实现的.由于高效的hash函数肯定不是对key做顺序散列的,所以,与其它语言实现的hashmap类似,在使用Go语言map过程中,key-value的插入顺序与遍历map时key的访问顺序是不相同的.熟悉hashmap的同学对这个情况应该非常清楚. 所以,本文要提到的肯定不是这个,而是一个比较让人惊奇的情况,下面开始说明. 1. 通过range遍历map时,key的顺序被随机化 在golang 1.4版本中,借助关键字range对Go语