使用golang操作mysql数据库,怎么获取错误码

发现有一些golang的项目中,有通过分析数据库报出来的错误信息来进行后续逻辑处理的。比如通过strings.Contains(err.Error(), “doesn’t exist”),来判断某个表不存在。这种方式不够强壮,最佳方式是通过错误码,如例子:

package main

import (
	"database/sql"
	"fmt"

	"github.com/VividCortex/mysqlerr"
	"github.com/go-sql-driver/mysql"
)

var (
	ERRNO_TABLE_DOES_NOT_EXIST uint16 = 1146
)

func TagTableExists(table string) bool {

	db, err := sql.Open("mysql", "user:password@tcp(localhost)/db")
	if err != nil {
		panic(err.Error())
	}

	stmtIns, err := db.Prepare(fmt.Sprintf("desc %s", table))
	if err != nil {
		panic(err.Error())
	}
	defer stmtIns.Close()

	_, err = stmtIns.Exec()
	if err != nil {
		if driverError, ok := err.(*mysql.MySQLError); ok {
			if driverError.Number == mysqlerr.ER_NO_SUCH_TABLE {
				return false
			}
		}
		panic(err.Error())
	}
	return true
}

func main() {
	fmt.Println(TagTableExists("sometable"))
}

参考文档