最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Go語言中如何進(jìn)行數(shù)據(jù)庫查詢操作

 更新時間:2025年11月15日 09:11:20   作者:Nil208  
在Go語言中,與數(shù)據(jù)庫交互通常通過使用數(shù)據(jù)庫驅(qū)動來實現(xiàn),Go語言支持多種數(shù)據(jù)庫,如MySQL、PostgreSQL、SQLite等,每種數(shù)據(jù)庫都有其對應(yīng)的官方或第三方驅(qū)動,接下來通過本文給大家介紹Go語言中進(jìn)行數(shù)據(jù)庫查詢操作方法,感興趣的朋友跟隨小編一起看看吧

查詢函數(shù)QueryRow和Query詳細(xì)對比

特性QueryRowQuery
返回值數(shù)量1個:*sql.Row2個:(*sql.Rows, error)
錯誤處理時機(jī)Scan()時處理立即處理 + 遍歷后檢查
適用場景確定只有單行結(jié)果可能有多行結(jié)果
資源釋放自動管理必須手動調(diào)用rows.Close()
結(jié)果遍歷直接調(diào)用Scan()循環(huán)rows.Next() + rows.Scan()
空結(jié)果處理返回sql.ErrNoRows空結(jié)果集不報錯,循環(huán)0次

initDB()   連接數(shù)據(jù)庫

package main
import (
	"database/sql"
	"log"
)
func initDB() {
	var err error
	// 設(shè)置一下dns charset:編碼方式 parseTime:是否解析time類型 loc:時區(qū)
	dsn := "rootname:password@tcp(127.0.0.1:3306)/table?charset=utf8&parseTime=True&loc=Local"
//rootname 和 password 和 table 是自定義的 需要自己設(shè)置數(shù)據(jù)庫
	db, err = sql.Open("mysql", dsn) // 打開mysql驅(qū)動
	// sql.Open():
	//   第一個參數(shù):驅(qū)動名稱"mysql"
	//   第二個參數(shù):DSN連接字符串
	//   返回值:1.db *sql.DB:數(shù)據(jù)庫連接對象指針  2.err error:錯誤信息
	if err != nil { // 若有錯誤信息:
		log.Fatalln(err) // log.Fatalln()會在打印錯誤信息后調(diào)用os.Exit(1)終止程序
	}
	err = db.Ping() // 用于驗證DSN是否正確,數(shù)據(jù)庫是否可訪問,Ping()是正式連接
	if err != nil {
		log.Fatalln(err)
	}
	log.Println("Successfully connected!")
	return
}

main主函數(shù)

package main
import (
	"database/sql"                     // 標(biāo)準(zhǔn)庫
	_ "github.com/go-sql-driver/mysql" // MySQL驅(qū)動
)
// 定義一個全局對象db
var db *sql.DB
// 定義student結(jié)構(gòu)體
type student struct {
	id   int
	name string
	age  int
}
func main() {
	// 初始化連接
	initDB()
	defer db.Close() // defer關(guān)鍵字確保在main函數(shù)退出前執(zhí)行數(shù)據(jù)庫關(guān)閉操作
	// 延遲執(zhí)行 相當(dāng)于堆在棧中 最后按照順序出棧
	// db.Close() 關(guān)閉數(shù)據(jù)庫 釋放資源
	// 調(diào)用查詢函數(shù)
	queryRowDemo()
	queryMultiRowDemo()
	//先initDB(),再queryRowDemo(),queryMultiRowDemo(),最后db.Close()
}

queryMultiRowDemo()    查詢多行數(shù)據(jù)

package main
import "fmt"
func queryMultiRowDemo() {
	sqlStr := "select id,name,age from student where id >?" //sql語句
	rows, err := db.Query(sqlStr, 0)                        //Query返回值有2個:(*sql.Rows, error)
	if err != nil {
		fmt.Printf("scan failed, err:%v\n", err)
		return
	}
	defer rows.Close() //用多行查詢一定要關(guān)閉
	for rows.Next() { //rows.Next() 移到下一行記錄
		//rows.Next() 在還有數(shù)據(jù)時返回 true,沒有數(shù)據(jù)時返回 false
		var u student
		err := rows.Scan(&u.id, &u.name, &u.age) //每行數(shù)據(jù)單獨處理
		if err != nil {
			fmt.Printf("scan failed, err:%v\n", err)
			return
		}
		fmt.Printf("id:%d name:%s age:%v\n", u.id, u.name, u.age)
	}
}

queryRowDemo()     查詢單行數(shù)據(jù)

package main
import "fmt"
// 查詢單條數(shù)據(jù)示例
func queryRowDemo() {
	sqlStr := "select id,name,age from student where id = ?"
	var u student
	row := db.QueryRow(sqlStr, 1) //db.QueryRow(sqlStr,1) 表示單行數(shù)據(jù)
	//QueryRow 不返回error,錯誤在后續(xù)Scan中處理
	err := row.Scan(&u.id, &u.name, &u.age) //單行查詢直接Scan Scan里面是取地址
	if err != nil {
		fmt.Printf("Scan failed, err:%v\n", err)
		return
	}
	fmt.Printf("id:%d,name:%s, age:%d\n", u.id, u.name, u.age)
}
//go查詢數(shù)據(jù): 先sqlStr:表示sql語句 里面有未知參數(shù)?
//var u student u表示一個結(jié)構(gòu)體Student
//接下來就是套路:先用db.QueryRow函數(shù) 兩個參數(shù) 一個sqlStr,另一個表示未知參數(shù)的具體值
//緊接著用Scan函數(shù)取出數(shù)據(jù)庫里的值 里面的參數(shù)一定是帶取地址符
//對err進(jìn)行判斷 最后打印

以下是我自己數(shù)據(jù)庫的demo

運行結(jié)果

到此這篇關(guān)于Go語言中如何進(jìn)行數(shù)據(jù)庫查詢操作的文章就介紹到這了,更多相關(guān)go數(shù)據(jù)庫查詢內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 10個現(xiàn)代網(wǎng)站開發(fā)必備的Go軟件包工具盤點

    10個現(xiàn)代網(wǎng)站開發(fā)必備的Go軟件包工具盤點

    這篇文章主要為大家介紹了10個現(xiàn)代網(wǎng)站開發(fā)必備的Go軟件包,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-10-10
  • golang搭建靜態(tài)web服務(wù)器的實現(xiàn)方法

    golang搭建靜態(tài)web服務(wù)器的實現(xiàn)方法

    這篇文章主要介紹了golang搭建靜態(tài)web服務(wù)器的實現(xiàn)方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-08-08
  • gin+gorm實現(xiàn)goweb項目的示例代碼

    gin+gorm實現(xiàn)goweb項目的示例代碼

    Gorm是Go語言的ORM框架,提供一套對數(shù)據(jù)庫進(jìn)行增刪改查的接口,本文主要介紹了gin+gorm實現(xiàn)goweb項目的示例代碼,具有一定的參考價值,感興趣的可以了解一下
    2025-03-03
  • Go語言實現(xiàn)并發(fā)控制的常見方式詳解

    Go語言實現(xiàn)并發(fā)控制的常見方式詳解

    這篇文章主要為大家詳細(xì)介紹了Go語言實現(xiàn)并發(fā)控制的幾種常見方式,文中的示例代碼講解詳細(xì),具有一定的借鑒價值,有需要的小伙伴可以參考一下
    2024-03-03
  • 一文詳解go同步協(xié)程的必備工具WaitGroup

    一文詳解go同步協(xié)程的必備工具WaitGroup

    這篇文章主要為大家介紹了一文詳解go同步協(xié)程的必備工具WaitGroup使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-03-03
  • Go構(gòu)建高性能的命令行工具使例詳解

    Go構(gòu)建高性能的命令行工具使例詳解

    這篇文章主要為大家介紹了Go構(gòu)建高性能的命令行工具使例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-12-12
  • 基于Go語言實現(xiàn)一個壓測工具

    基于Go語言實現(xiàn)一個壓測工具

    這篇文章主要為大家詳細(xì)介紹了基于Go語言實現(xiàn)一個簡單的壓測工具,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2025-01-01
  • Go語言將string解析為time.Time時兩種常見報錯

    Go語言將string解析為time.Time時兩種常見報錯

    本文主要介紹了Go語言將string解析為time.Time時兩種常見報錯,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • Golang sync.Pool的源碼解析

    Golang sync.Pool的源碼解析

    Pool是用于存放臨時對象的集合,這些對象是為了后續(xù)的使用,以達(dá)到復(fù)用對象的效果,本文將詳解解析sync.Pool 源碼,需要的朋友可以參考下
    2023-05-05
  • golang中json操作的完全指南

    golang中json操作的完全指南

    golang標(biāo)準(zhǔn)庫有一個名叫encoding/json的包,包含了JSON的序列化(Marshal)和反序列化(Unmarshal)的能力,下面這篇文章主要給大家介紹了關(guān)于golang中json操作的相關(guān)資料,需要的朋友可以參考下
    2022-07-07

最新評論

东光县| 会昌县| 松原市| 南丰县| 土默特右旗| 芷江| 苏尼特左旗| 邵阳县| 兴义市| 武川县| 阳泉市| 葫芦岛市| 崇左市| 咸宁市| 安岳县| 永平县| 博客| 昂仁县| 抚宁县| 楚雄市| 林口县| 江城| 德格县| 益阳市| 积石山| 桃江县| 天祝| 庆安县| 沙湾县| 仙居县| 怀来县| 天柱县| 上蔡县| 宜良县| 平乡县| 枣庄市| 临沧市| 本溪| 平邑县| 恩平市| 化州市|