需求场景:主要是用在如果本地有比较庞大的数据表,导致excel不能正常使用的时候,或者是要做批量的数据迁移的场景,可以通用

1、需要用到的函数库
sql用于数据库操作,mysql驱动程序,日志信息,还有表格函数包。

import (
	"database/sql"
	"fmt"
	"log"

	_ "github.com/go-sql-driver/mysql"

	"github.com/xuri/excelize/v2"
)

2、数据库连接和预编译sql语句conn.Prepare和sql.Open函数

conn, err := sql.Open("mysql", "用户名:密码@tcp(机器IP:端口)/mysql?charset=utf8")
	defer conn.Close()
	res, err := conn.Exec("create table if not exists 表名(列1INT UNSIGNED AUTO_INCREMENT,列2 VARCHAR(100),列3 VARCHAR(50),列4 VARCHAR(200),列4 VARCHAR(300),列5 VARCHAR(80),PRIMARY KEY(列5 ,列5 ),unique key(列5 ,列5 ,列5 ))DEFAULT CHARSET=utf8")
	if err != nil {
		fmt.Println(err)
	}
	log.Println(res, err)
	sql, err := conn.Prepare("insert into serviceId(列1 ,列2 ,列3 ,列4 列5 ) values (?,?,?,?,?)")
	log.Println(sql, err)
	defer sql.Close()

3、读取表格操作,并且执行 sql.Exec 将数据导入数据库中

// mysqldate
package main

import (
	"database/sql"
	"fmt"
	"log"
	_ "github.com/go-sql-driver/mysql"
	"github.com/xuri/excelize/v2"
)
func main() {
	conn, err := sql.Open("xxxxx", "xxxxx")
	defer conn.Close()
	res, err := conn.Exec("xxxxx")
	if err != nil {
		fmt.Println(err)
	}
	log.Println(res, err)
	sql, err := conn.Prepare("xxxxx")
	log.Println(sql, err)
	defer sql.Close()
	
	f, err := excelize.OpenFile("xxxxx.xlsx")
	if err != nil {
		fmt.Println(err)
		return
	}
	rows, err := f.GetRows("xxxxx")
	//fmt.Println(len(rows[0]))
	//	fmt.Println(len(cell)
	count := 0
	for _, row := range rows[1:] {
		res, err := sql.Exec(row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], row[10]) //string格式
		if err != nil {
			log.Println(res, err)
		} else {
			count += 1
			log.Println("success")
		}
	}
	fmt.Println(count)
	fmt.Printf("%T", rows[4]) //string[]格式

}

参考的函数库操作地址:
Go 语言编写的用于操作 Office Excel 文档基础库:Excelize
Go语言执行SQL的简单操作:Go database/sql 指南

总结:代码思想比较简答,就是直接连接数据库,然后通过读取表格的内容,再把表格内容存到数据库里面。推荐大家在初学的时候多看官方的函数库介绍和指导,不然是不够全面的。下一篇介绍数据库查询接口的编写