go操作数据库,本来是想尝试oracle的,并且在实际开发中使用下,但是研究了几天失败了,真心觉得在windows下搞一线略微前卫一点的东西都变得特别复杂... 所以看了下如何连接mysql的,自测成功mark下,希望能帮助到刚刚开始接触go类似我这样的小鸟不要浪费更多的时间走弯路,贴代码!借鉴了下 http://wendal.net/448.html 这个哥们的文档,但是有一点点小错误~..
下面是我已经通过并且真实得到现实结果的测试代码:
package main
import (
"database/sql"
"fmt"
//需要在本地配置gobin,并且在gitbub上搞到驱动,并且本地编译通过,只要配置好
//path,cmd下执行命令:go get github.com/go-sql-driver/mysql
//就可以再你配置的gobin下看到打包好的可以使用的代码
//项目主页 https://github.com/Go-SQL-Driver/MySQL ,里面的文档讲解的非常详细
_ "github.com/go-sql-driver/mysql"
)
func main() {
// 打开数据库,sns是我的数据库名字,需要替换你自己的名字,(官网给的没有加tcp,跑不起来,具体有时 间看看源码分析下为何)
db, err := sql.Open("mysql", "root:123456@tcp(localhost:3306)/sns?charset=utf8")
if err != nil {
panic(err.Error())
}
defer db.Close()
// topic是我本地数据库的表名,需要替换你自己的表名,这里面的英文注释都是引用github官网的~~
// 嘿嘿 我只是想跑起来看看
rows, err := db.Query("SELECT * FROM topic")
if err != nil {
panic(err.Error())
}
// Get column names
columns, err := rows.Columns()
if err != nil {
panic(err.Error())
}
// Make a slice for the values
values := make([]sql.RawBytes, len(columns))
// rows.Scan wants '[]interface{}' as an argument, so we must copy the
// references into such a slice
// See http://code.google.com/p/go-wiki/wiki/InterfaceSlice for details
scanArgs := make([]interface{}, len(values))
for i := range values {
scanArgs[i] = &values[i]
}
// Fetch rows
for rows.Next() {
// get RawBytes from data
err = rows.Scan(scanArgs...)
if err != nil {
panic(err.Error())
}
// Now do something with the data.
// Here we just print each column as a string.
var value string
for i, col := range values {
// Here we can check if the value is nil (NULL value)
if col == nil {
value = "NULL"
} else {
value = string(col)
}
fmt.Println(columns[i], ": ", value)
}
fmt.Println("-----------------------------------")
}
}
总是觉得go有无穷的魅力,本人是搞java开发的,但是总是觉得实际开发中有时候会被可以的抽象所累...可能是水平原因,写出来的代码总是面向过程的! 哎.. 自己也感觉自己挺悲剧的... 哈哈 希望贴出来的代码可以帮助下有需要的人.. 备注下:本人机器是dell INSPIRON 、win7 64 MySQL 5.5.21 . 2013.5.13 测试通过的.
如果有错误的地方及时留言我... 不希望自己的错误耽误到别人的时间~
分享 进步.
来源:oschina
链接:https://my.oschina.net/u/229983/blog/130170