golang mysql查询返回集

        网上很多go操作数据库的,对数据库的查询大多需要通过结构体来绑定返回数据库字段,对于正常go对mysql查询业务来讲这个没毛病,相比python执行查询语句直接返回所有信息,go的这种通过结构体来查询属实有的麻烦。当然go也能实现python查询这种返回集,网上基本上都查不到这种方式。国内外的文章都翻过,最终还是在国内找到一篇(抱歉,忘记出处了,若有师傅找到出处记得告知一下,还是标注一下出处,当时只是记录了一下语句)。因为要写点东西,所以就到处查了些资料,于是在此基础上做了些更改,写出来记录一下。

package main

import (
	"database/sql"
	"fmt"
	_ "github.com/go-sql-driver/mysql"
	"log"
)

func main() {
	//连接数据库查询
	db, err := sql.Open("mysql", "root:root@tcp(127.0.0.1:3306)/dvwa")
	if err != nil {
		log.Fatal(err.Error())
	}

	cmd := "select * from users"
	
	rows, err := db.Query(cmd)

	if err == nil {
		var result [2][64]string
		columns, _ := rows.Columns()
		for i := range columns {
			result[0][i] = columns[i]
		}
		//获取字段名
		for i := range columns {
			if i == len(columns)-1 {
				fmt.Print(columns[i])
			} else {
				fmt.Print(string(columns[i]) + ",")
			}
		}
		//定义一个切片,长度是字段的个数,切片里面的元素类型是sql.RawBytes
		values := make([]sql.RawBytes, len(columns))
		//定义一个切片,元素类型是interface{} 接口
		scanArgs := make([]interface{}, len(values))
		for i := range values {
			//把sql.RawBytes类型的地址存进去了
			scanArgs[i] = &values[i]
		}
		//获取字段值
		for rows.Next() {
			rows.Scan(scanArgs...)
			fmt.Print("\n")
			for i, col := range values {
				if i != len(columns)-1 {
					fmt.Print(string(col) + ",")
				} else {
					fmt.Print(string(col))
				}
			}
		}
		rows.Close()
	} else {
		fmt.Print(err.Error())
	}

	//最终关闭数据库
	defer db.Close()
}

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值