一、安装
在windows下安装
1、goland(go IDE) 安装位置:
D:\package\goland
2、go 安装位置 :
D:\package\go
3、GOPATH 位置:
D:\package\go\workspaceD:\package\go\workspace
创建三个空文件夹 在GOPATH目录下创建三个文件 bin 、src 、pkg
4、GOROOT 位置:
D:\package\go
5、配置正确的环境变量 在path中配置 GOPATH 和 GOROOT
在linux下安装
1、解压安装包
>tar -zxvf go1.7.6.linux-amd64.tar.gz
2、安装目录为:
/opt/go/go
3、工作目录为:
/opt/go/workspace
4、配置环境变量
>vi ~/.bashrc
export GOROOT=/opt/go/go
export PATH=$GOROOT/bin:$PATH
export GOPATH=/opt/go/workspace
5、刷新环境变量
source ~/.bashrc
6、执行测试程序test.go
> go run test.go
二、安装GIT
安装git,为了用来下载mysql驱动包,此操作在Windows下执行
1、git安装目录为:
D:\package\Git
2、给path中配置git的环境变量
3、使用git下载mysql的驱动
在Windows中 ,使用cmd切换到GOPATH的src目录下 ,执行
>go get github.com/go-sql-driver/MYSQL
1)异常信息:
fatal: unable to access 'https://github.com/go-sql-driver/MYSQL/': error setting certificate verify locations:
CAfile: D:/package/Git/mingw64/libexec/ssl/certs/ca-bundle.crt
CApath: none
package github.com/go-sql-driver/MYSQL: exit status 128
2)解决办法:
在git安装目录下打开git-bash,执行以下命令即可;
> git config --system http.sslverify false
4、导入驱动包
下载好驱动后可看到在GOPATH目录下的src文件下生成github.com这个文件
在go程序中导入以下包
import(
"database/sql"
_"github.com/Go-SQL-Driver/MySQL"//就是你下载的文件地址,如果是自己拷贝的,那么就写自己创建的路径
"log"
//"reflect" //获取变量类型用
)
三、编译程序
在Windows中编译Windows可执行文件
1、在windows中,使用cmd切换到工程目录中
2、使用 go run project_name 即可执行程序;
3、使用 go build projec_name 即可编译程序;
4、编译好的程序执行执行即可。
在Windows中编译linux可执行文件
1、首先需要设置以下两个参数:
set GOARCH=amd64
set GOOS=linux
2、编译程序,使用go build 出来的就是linux 64 位的可执行程序了
3、例如test.go 这个go程序
执行 go build test.go
生成编译好的test文件
在linux机器中执行 ./test 即可。
四、连接脚本
package main
import(
"database/sql"
_"github.com/Go-SQL-Driver/MySQL"//就是你下载的文件地址,如果是自己拷贝的,那么就写自己创建的路径
"log"
"fmt"
"time"
)
func main() {
//username mysql账号
var userName = "test2"
//password mysql密码
var passWord = "abc"
//ip mysql数据库的IP
var ip = "192.168.136.136"
//port mysql数据库的端口
var port = "3306"
// database 需要连接的数据库名称
var database = "test"
dataSourceName := sourceName2(userName,passWord ,ip ,port ,database)
//连接示例
// db,err := sql.Open("mysql","test2:abc@tcp(192.168.136.136:3306)/test?charset=utf8" )
conn,err := sql.Open("mysql",dataSourceName )
if err != nil{
panic(err.Error())
log.Println(err)
return
}else {
fmt.Println("connection mysql succcess ! ")
}
defer conn.Close() //只有在前面用了 panic[抛出异常] 这时defer才能起作用,如果链接数据的时候出问题,他会往err写数据。defer:延迟,这里立刻申请了一个关闭sql 链接的草错,defer 后的方法,或延迟执行。在函数抛出异常一会被执行
//产生查询语句的Statement
stmt, err := conn.Prepare(`show tables`)
if err != nil {
log.Fatal("Prepare failed:", err.Error())
}
defer stmt.Close()
//通过Statement执行查询
rows, err := stmt.Query()
if err != nil {
log.Fatal("Query failed:", err.Error())
}
//建立一个列数组
cols, err := rows.Columns()
var colsdata = make([]interface{}, len(cols))
for i := 0; i < len(cols); i++ {
colsdata[i] = new(interface{})
fmt.Print(cols[i])
fmt.Print("\t")
}
fmt.Println()
//遍历每一行
for rows.Next() {
rows.Scan(colsdata...) //将查到的数据写入到这行中
PrintRow(colsdata) //打印此行
}
defer rows.Close()
}
//连接到mysql
func sourceName2(userName , passWord ,ip , port, database string) string{
var connection string
connection = userName + ":" + passWord +"@tcp(" + ip + ":" + port + ")/"+database+"?charset=utf8"
return connection
}
//打印一行记录,传入一个行的所有列信息
func PrintRow(colsdata []interface{}) {
for _, val := range colsdata {
switch v := (*(val.(*interface{}))).(type) {
case nil:
fmt.Print("NULL")
case bool:
if v {
fmt.Print("True")
} else {
fmt.Print("False")
}
case []byte:
fmt.Print(string(v))
case time.Time:
fmt.Print(v.Format)
default:
fmt.Print(v)
}
fmt.Print("\t")
}
fmt.Println()
}