亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

go語言的sql包原理與用法分析

 更新時(shí)間:2016年07月26日 17:00:50   作者:軒脈刃  
這篇文章主要介紹了go語言的sql包原理與用法,較為詳細(xì)的分析了Go語言里sql包的結(jié)構(gòu)、相關(guān)函數(shù)與使用方法,需要的朋友可以參考下

本文實(shí)例講述了go語言的sql包原理與用法。分享給大家供大家參考,具體如下:

go的sql包是在pkg/database中,里面的兩個(gè)包sql和sql/driver可以一起看。建議看這個(gè)兩個(gè)包之前可以先看看sql文件夾下的doc.txt。這個(gè)文檔說了幾點(diǎn)比較重要的:

1 這兩個(gè)包是真正Go風(fēng)格的包。

2 這使用這兩個(gè)包就不需要關(guān)于并發(fā)處理了,也不需要維護(hù)自己的數(shù)據(jù)庫連接池了,一旦建立了一個(gè)連接,這個(gè)連接是可以在各個(gè)goroutine之間共用的。

3 sql/driver提供的是數(shù)據(jù)庫的接口,具體的實(shí)現(xiàn)還需要自己實(shí)現(xiàn)。

先看database/driver包

第一個(gè)用到的方法是Register

這個(gè)方法將實(shí)現(xiàn)了driver.Driver的驅(qū)動(dòng)注冊到變量drivers中,當(dāng)寫完一個(gè)驅(qū)動(dòng)之后,就需要將驅(qū)動(dòng)注冊到sql中才能使用sql包中的這些接口。這個(gè)實(shí)現(xiàn)了driver.Driver的必須實(shí)現(xiàn)了Open方法.

driver.Open返回的是driver.Conn,它的三個(gè)方法

Prepare : 參數(shù)綁定
Close : 關(guān)閉連接
Begin : 支持事務(wù)

先看Prepare,這個(gè)和php mysql pdo一樣的用法

Conn.Prepare("select * from test where a=?")

返回的Stmt結(jié)構(gòu):

Close : 關(guān)閉這個(gè)statement
NumInput : 返回有多少個(gè)可以綁定的參數(shù)
Exec : Insert或者update等無返回的使用
Query :select等查詢操作使用
Exec是綁定變量,然后返回Result結(jié)構(gòu)
Query是綁定變量,然后返回Rows結(jié)果集

看Result里面的方法:

LastInsertId()  : Insert操作之后獲取到的主鍵id
RowsAffect() : 影響到的行數(shù)
Rows:
Columns() : 返回的數(shù)據(jù)有哪些列,其實(shí)就是返回的表列名
Close() : 關(guān)閉Rows,調(diào)用之后不能再進(jìn)行任何操作
Next() : 將下一行的數(shù)據(jù)取到des[] Value中。這里的Value接口可以是int64,float64,bool,[]byte,string,time.Time

下面回到Begin,返回了Tx

開始事務(wù)之后除了查詢之外,就兩種行為:Commit和Rollback,這兩種行為都是Tx接口的方法

drvier中的結(jié)構(gòu)全是接口性質(zhì)的,它需要你來實(shí)現(xiàn)并注冊到Register中。

驅(qū)動(dòng)的具體使用是在database/sql中

首先將幾個(gè)sql的結(jié)構(gòu)看一遍

首先sql中的結(jié)構(gòu)都是對driver中的結(jié)構(gòu)進(jìn)行了一層封裝,比如像Rows,有個(gè)內(nèi)部屬性是rowsi driver.Rows。

對sql的實(shí)際操作都是使用driver.Rows里面的接口進(jìn)行操作的,實(shí)際也就是使用你自己實(shí)現(xiàn)的driver進(jìn)行操作。

driver和sql就像插頭和一個(gè)充滿插頭的汽車一樣,你實(shí)現(xiàn)了driver,即實(shí)現(xiàn)了這些插頭的配置,你就可使用sql這個(gè)汽車了。

Result : 和driver中的Result一致,即你如果實(shí)現(xiàn)了driver.Result,那你自然就實(shí)現(xiàn)了sql.Result。它是個(gè)接口,其實(shí)沒有什么特殊的用處,如果sql包中的所有Result都換成driver.Result也是行的,估計(jì)是作者希望返回值不要引用到其他包去,就使用這種方法。

Rows :  基于了driver.Rows, 還在上面擴(kuò)展了幾個(gè)其他的方法。擁有方法:

Close
Cloumns
Err
Next
Scan
Stmt :基于driver.Stmt。擁有方法
Close
Exec
Query
QueryRow
Tx:基于driver.Tx。擁有方法:
Commit
Exec
Prepare
Query
QueryRow
Rollback
Stmt

從sql.Open開始

返回了sql.DB結(jié)構(gòu),這個(gè)結(jié)構(gòu)是實(shí)現(xiàn)了driver.Conn結(jié)構(gòu),除了Conn已有的Prepare,Begin,Close之外,還直接多了幾個(gè)查詢方法:

Driver() : 返回當(dāng)前驅(qū)動(dòng)
Exec() : 直接進(jìn)行操作
Query() : 進(jìn)行查詢,返回Rows
QueryRow() : 預(yù)期返回單行,返回Row

不管Rows還是Row都有個(gè)很好用的方法Scan來將數(shù)據(jù)放到制定的變量中去。

比如下面就是典型的Rows用法

復(fù)制代碼 代碼如下:
rows, err := db.Query("SELECT ...")
...
for rows.Next() {
var id int
var name string
err = rows.Scan(&id, &name)
...
}

Prepare返回Stmt結(jié)構(gòu)

Exec返回Result結(jié)構(gòu)

至于這幾個(gè)結(jié)構(gòu)也有各自的方法。

希望本文所述對大家Go語言程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • Go語言題解LeetCode599兩個(gè)列表的最小索引總和

    Go語言題解LeetCode599兩個(gè)列表的最小索引總和

    這篇文章主要為大家介紹了Go語言題解LeetCode599兩個(gè)列表的最小索引總和示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12
  • golang json.Marshal 特殊html字符被轉(zhuǎn)義的解決方法

    golang json.Marshal 特殊html字符被轉(zhuǎn)義的解決方法

    今天小編就為大家分享一篇golang json.Marshal 特殊html字符被轉(zhuǎn)義的解決方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-08-08
  • 深入了解Golang中的Slice底層實(shí)現(xiàn)

    深入了解Golang中的Slice底層實(shí)現(xiàn)

    本文主要為大家詳細(xì)介紹了Golang中slice的底層實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2023-02-02
  • 深入剖析Go語言中數(shù)組和切片的區(qū)別

    深入剖析Go語言中數(shù)組和切片的區(qū)別

    本文將深入探討 Go 語言數(shù)組和切片的區(qū)別,包括它們的定義、內(nèi)存布局、長度和容量、初始化和操作等方面。從而更好地在實(shí)際開發(fā)中選擇和使用合適的數(shù)據(jù)結(jié)構(gòu),提高代碼的效率和可維護(hù)性,需要的可以參考一下
    2023-05-05
  • Go?WaitGroup及Cond底層實(shí)現(xiàn)原理

    Go?WaitGroup及Cond底層實(shí)現(xiàn)原理

    這篇文章主要為大家介紹了Go?WaitGroup及Cond底層實(shí)現(xiàn)原理詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • Go語言利用heap實(shí)現(xiàn)優(yōu)先級隊(duì)列

    Go語言利用heap實(shí)現(xiàn)優(yōu)先級隊(duì)列

    這篇文章主要為大家詳細(xì)介紹了Go語言中heap的使用以及如何利用heap實(shí)現(xiàn)優(yōu)先級隊(duì)列的相關(guān)資料,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-05-05
  • Go語言實(shí)現(xiàn)Snowflake雪花算法

    Go語言實(shí)現(xiàn)Snowflake雪花算法

    雪花算法產(chǎn)生的背景當(dāng)然是twitter高并發(fā)環(huán)境下對唯一ID生成的需求,得益于twitter內(nèi)部牛逼的技術(shù),雪花算法能夠流傳于至今并且被廣泛使用,本文就詳細(xì)的介紹一下,感興趣的可以了解一下
    2021-06-06
  • go內(nèi)置函數(shù)copy()的具體使用

    go內(nèi)置函數(shù)copy()的具體使用

    當(dāng)我們在Go語言中需要將一個(gè)切片的內(nèi)容復(fù)制到另一個(gè)切片時(shí),可以使用內(nèi)置的copy()函數(shù),本文就介紹了go內(nèi)置函數(shù)copy()的具體使用,感興趣的可以了解一下
    2023-08-08
  • 在Go中創(chuàng)建隨機(jī)的安全密碼

    在Go中創(chuàng)建隨機(jī)的安全密碼

    今天小編就為大家分享一篇關(guān)于在Go中創(chuàng)建隨機(jī)的安全密碼,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2018-10-10
  • GoLang context包的使用方法介紹

    GoLang context包的使用方法介紹

    日常Go開發(fā)中,Context包是用的最多的一個(gè)了,幾乎所有函數(shù)的第一個(gè)參數(shù)都是ctx,那么我們?yōu)槭裁匆獋鬟fContext呢,Context又有哪些用法,底層實(shí)現(xiàn)是如何呢?相信你也一定會(huì)有探索的欲望,那么就跟著本篇文章,一起來學(xué)習(xí)吧
    2023-03-03

最新評論