一、安装
在windows下安装
在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() }