go语言 mysql高效_Go-MySQL-Driver:一个Go语言的轻量级极速的mysql驱动-Go语言中文社区...

Go语言的 database/sql 包的一个 MySQL驱动。

gomysql_m.png

特性

轻量级与快速

原生Go语言,没有C绑定,只有纯Go

没有不安全的操作(类型转换等)

动态处理崩溃的连接

动态连接池

支持大于16MB的查询

环境要求

Go 1以上

MySQL (Version 4.1 or higher), MariaDB or Percona Se

rver

安装

简单地使用 go tool 在shell中把安装包加到你的$GOPATH

$ go get github.com/go-sql-driver/mysql

1

$gogetgithub.com/go-sql-driver/mysql

使用

sql包的用法简洁明了:

1、建立连接

首先是Open,

db, err := sql.Open(“mysql”, “user:password@/dbname”)

db 是一个*sql.DB类型的指针,在后面的操作中,都要用到db

open之后,并没有与数据库建立实际的连接,与数据库建立实际的连接是通过Ping方法完成。此外,db应该在整个程序的生命周期中存在,也就是说,程序一启动,就通过Open获得db,直到程序结束,再Close db,而不是经常Open/Close。

err = db.Ping()

2、基本用法

DB的主要方法有:

Query 执行数据库的Query操作,例如一个Select语句,返回*Rows

QueryRow 执行数据库至多返回1行的Query操作,返回*Row

PrePare 准备一个数据库query操作,返回一个*Stmt,用于后续query或执行。这个Stmt可以被多次执行,或者并发执行

Exec 执行数不返回任何rows的据库语句,例如delete操作

一段简单的测试代码:

Java

package main

import (

"database/sql"

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

"log"

)

func insert(db *sql.DB) {

stmt, err := db.Prepare("INSERT INTO user(username, password) VALUES(?, ?)")

defer stmt.Close()

if err != nil {

log.Println(err)

return

}

stmt.Exec("guotie", "guotie")

stmt.Exec("testuser", "123123")

}

func main() {

db, err := sql.Open("mysql", "root:guotie@/hello")

if err != nil {

log.Fatalf("Open database error: %sn", err)

}

defer db.Close()

err = db.Ping()

if err != nil {

log.Fatal(err)

}

insert(db)

rows, err := db.Query("select id, username from user where id = ?", 1)

if err != nil {

log.Println(err)

}

defer rows.Close()

var id int

var name string

for rows.Next() {

err := rows.Scan(&id, &name)

if err != nil {

log.Fatal(err)

}

log.Println(id, name)

}

err = rows.Err()

if err != nil {

log.Fatal(err)

}

}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

packagemain

import(

"database/sql"

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

"log"

)

funcinsert(db*sql.DB){

stmt,err:=db.Prepare("INSERT INTO user(username, password) VALUES(?, ?)")

deferstmt.Close()

iferr!=nil{

log.Println(err)

return

}

stmt.Exec("guotie","guotie")

stmt.Exec("testuser","123123")

}

funcmain(){

db,err:=sql.Open("mysql","root:guotie@/hello")

iferr!=nil{

log.Fatalf("Open database

error: %sn",

err)

}

deferdb.Close()

err=db.Ping()

iferr!=nil{

log.Fatal(err)

}

insert(db)

rows,err:=db.Query("select id, username from user where id = ?",1)

iferr!=nil{

log.Println(err)

}

deferrows.Close()

varidint

varnamestring

forrows.Next(){

err:=rows.Scan(&id,&name)

iferr!=nil{

log.Fatal(err)

}

log.Println(id,name)

}

err=rows.Err()

iferr!=nil{

log.Fatal(err)

}

}

github地址https://github.com/go-sql-driver/mysql,官网地址 http://godoc.org/github.com/go-sql-driver/mysql。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值