Go語言介紹以及實現(xiàn)MySQL數(shù)據(jù)庫的操作

今天給大家介紹一下Go語言,以及實現(xiàn)MySQL數(shù)據(jù)庫的操作示例,希望對大家能有所幫助!
一、Go語言介紹
Go語言,也稱為Golang,是由Google開發(fā)的一種靜態(tài)強(qiáng)類型、編譯型、并發(fā)型,并具有垃圾回收功能的編程語言。以下是Go語言的一些主要特點(diǎn):
二、Go語言特點(diǎn)
語法簡潔:摒棄了一些復(fù)雜的編程概念和冗余的語法,容易學(xué)習(xí)
高效性能:采用的靜態(tài)編譯和垃圾回收機(jī)制,實現(xiàn)了高效的內(nèi)存管理
并發(fā)支持:Go語言是為并發(fā)編程而設(shè)計的,原生支持goroutine和channel
強(qiáng)大的標(biāo)準(zhǔn)庫:Go語言擁有豐富的標(biāo)準(zhǔn)庫
社區(qū)活躍:Go語言的社區(qū)非常活躍,有著龐大的開發(fā)者群體

三、 Go語言應(yīng)用場景

服務(wù)器端開發(fā):適合構(gòu)建高性能的服務(wù)器端應(yīng)用程序。因為Go語言具有輕量級的協(xié)程(goroutine)和高效的并發(fā)編程機(jī)制。例如谷歌、Dropbox和Netflix等。
網(wǎng)絡(luò)編程:適合構(gòu)建Web服務(wù)器、微服務(wù)、網(wǎng)絡(luò)爬蟲、實時通信系統(tǒng)等。目前Go語言成為開發(fā)高負(fù)載網(wǎng)絡(luò)應(yīng)用的首選語言。
云計算:Go語言的輕量級和快速編譯的特點(diǎn)使得它非常適合于構(gòu)建云原生應(yīng)用。例如Docker和Kubernetes等。
系統(tǒng)編程:適合成為開發(fā)操作系統(tǒng)、驅(qū)動程序和嵌入式系統(tǒng)。
工具開發(fā):很多工具和框架都選擇使用Go語言進(jìn)行開發(fā)。例如,Docker、Etcd、InfluxDB和Prometheus等工具。
人工智能和大數(shù)據(jù)分析:Go語言的并發(fā)編程模型和內(nèi)存管理機(jī)制使得它可以高效地處理大規(guī)模數(shù)據(jù)和復(fù)雜計算任務(wù)。
四、Go語言環(huán)境安裝
安裝Go語言環(huán)境,首先官網(wǎng)下載WindowsGo語言安裝包
https://golang.google.cn/dl/

安裝之后,cmd運(yùn)行命令檢查環(huán)境是否安裝成功。

五、Go語言實現(xiàn)Mysql數(shù)據(jù)庫的增刪概啥
安裝操作數(shù)據(jù)庫依賴Go-MySQL-Driver
Go-MySQL-Driver是Go語言官方推薦的MySQL驅(qū)動, 是Go語言中使用MySQL的最佳選擇
go get -u github.com/go-sql-driver/mysql可能會報如下錯誤:

原因:
GO111MODULE 是 Go 1.11 引入的新版模塊管理方式。
GO111MODULE 環(huán)境變量用于開啟或關(guān)閉 Go 語言中的模塊支持,它有 off、on、auto 三個可選值,默認(rèn)為 auto
win10環(huán)境下需要執(zhí)行如下命令:
go env -w GO111MODULE=auto然后重新執(zhí)行安裝命令:
go get -u github.com/go-sql-driver/mysql如果下載的時候報錯:
connectex: A connection attempt failed because the connected party did not p直接進(jìn)入電腦的環(huán)境變量設(shè)置國內(nèi)鏡像地址。
新建環(huán)境變量GOPROXY。
值為:
https://mirrors.aliyun.com/goproxy/
點(diǎn)擊確定后,重啟命令行窗口,然后執(zhí)行下載命令:

代碼實現(xiàn)
package main
import (
  "database/sql"
  "fmt"
  "log"
  _ "github.com/go-sql-driver/mysql"
) 
/*
*獲取mysql數(shù)據(jù)庫版本
*/
func showMysqlVersion() {
	db, err := sql.Open("mysql", "root:12345678@tcp(127.0.0.1:3306)/test2?charset=utf8")
	if err != nil {
		log.Fatal(err)
	}
	db.Ping()
	defer db.Close()
	var version string
 
	errt2 := db.QueryRow("SELECT VERSION()").Scan(&version)
 
	if errt2 != nil {
		log.Fatal(errt2)
	}
	fmt.Println(version)
}
/*
*查詢數(shù)據(jù)測試
*/
func queryTest() {
	// 設(shè)置數(shù)據(jù)庫連接信息
	db, err := sql.Open("mysql", "root:12345678@tcp(127.0.0.1:3306)/test2")
	if err != nil {
		log.Fatal(err)
	}
	defer db.Close()
	// 執(zhí)行查詢
	rows, err := db.Query("SELECT id, name, age FROM t_user")
	if err != nil {
		log.Fatal(err)
	}
	defer rows.Close()
	// 遍歷查詢結(jié)果
	for rows.Next() {
		var id int
		var name string
		var age int
		if err := rows.Scan(&id, &name, &age); err != nil {
			log.Fatal(err)
		}
		fmt.Printf("ID: %d, Name: %s, Age: %d\n", id, name, age)
	}
	if err := rows.Err(); err != nil {
		log.Fatal(err)
	}
}
/*
*插入數(shù)據(jù)測試
*/
func insertTest() {
	db, err := sql.Open("mysql", "root:12345678@tcp(127.0.0.1:3306)/test2")
	db.Ping()
	defer db.Close()
 
	if err != nil {
		fmt.Println("connect DB error !")
		log.Fatalln(err)
	}
	_, err2 := db.Query("INSERT INTO t_user ( `name`, `address`, `age`) VALUES('小劉','廣東',35)")
	if err2 != nil {
		log.Fatal(err2)
	} 
	fmt.Println("數(shù)據(jù)插入成功")
}
/*
*數(shù)據(jù)更新測試
*/
func updateTest() {
	db, err := sql.Open("mysql", "root:12345678@tcp(127.0.0.1:3306)/test2")
	db.Ping()
	defer db.Close()
 
	if err != nil {
		fmt.Println("connect DB error !")
		log.Fatalln(err)
	}
 
	_, err2 := db.Query("update t_user set name='小明2' where id=1 ")
	if err2 != nil {
		log.Fatal(err2)
	}
 
	fmt.Println("數(shù)據(jù)更新成功")
}
/*
*數(shù)據(jù)更新測試
*/
func delTest() {
	db, err := sql.Open("mysql", "root:12345678@tcp(127.0.0.1:3306)/test2")
	db.Ping()
	defer db.Close()
 
	if err != nil {
		fmt.Println("connect DB error !")
		log.Fatalln(err)
	}
 
	_, err2 := db.Query("delete from t_user where id=2 ")
	if err2 != nil {
		log.Fatal(err2)
	}
 
	fmt.Println("數(shù)據(jù)刪除成功")
}
func main(){
	delTest()
	updateTest();	
	//insertTest()
	queryTest()
	showMysqlVersion()
}運(yùn)行效果如下圖:
















 
 
 





 
 
 
 