1. <ul id="0c1fb"></ul>

      <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
      <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区

      RELATEED CONSULTING
      相關(guān)咨詢
      選擇下列產(chǎn)品馬上在線溝通
      服務(wù)時間:8:30-17:00
      你可能遇到了下面的問題
      關(guān)閉右側(cè)工具欄

      新聞中心

      這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
      go語言scan導(dǎo)入包的簡單介紹

      golang-redis系列——返回值助手函數(shù)(二)

      從上一節(jié)的內(nèi)容可知,Do() 和 Receive() 等方法的返回值,除了 error 外,是一個 interface{} 類型的返回值,因此當(dāng)我們的復(fù)雜操作返回的不是基本數(shù)據(jù)類型時,就需要我們自己解析返回值,例如,當(dāng)我們利用 HMGET 方法獲取一批返回值時,就需要對返回結(jié)果進(jìn)行解析,具體如下:

      創(chuàng)新互聯(lián)堅持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:網(wǎng)站制作、成都網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時代的瑪沁網(wǎng)站設(shè)計、移動媒體設(shè)計的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!

      由于返回值是多條數(shù)據(jù),因此需要先將 reply 轉(zhuǎn)成 []interface 類型,然后在遍歷結(jié)果時在分別轉(zhuǎn)成 []uint8 (byte數(shù)組), 最后再轉(zhuǎn)成 string 類型。

      隨著我們操作復(fù)雜度,數(shù)據(jù)解析的工作量也會非常大,(lua 腳本的使用,會使結(jié)果的解析更為復(fù)雜,因為可能存在多種類型的結(jié)果一起返回的情況,lua 腳本相關(guān)的內(nèi)容會在下一節(jié)介紹)。

      redigo 包中的返回值助手函數(shù)的存在,就是為了幫助我們完成這些枯燥繁瑣的數(shù)據(jù)解析過程。

      返回值助手函數(shù)相關(guān)源碼路徑為 github.com/gomodule/redigo/redis/reply.go 提供的主要方法如下:

      上述返回值助手函數(shù)的具體使用,應(yīng)該依據(jù)具體的命令進(jìn)行選擇。如果大家還記得上一節(jié)介紹的 Redis 基本數(shù)據(jù)類型,可能會有些疑問,對于 redis 來說,其數(shù)據(jù)據(jù)存儲本質(zhì)都是 []bytes, 為什么可以解析出 Int、int64、float等類型的數(shù)據(jù)呢?

      我們以 Float64() 為例進(jìn)行說明,具體源碼如下:

      其實,返回值助手函數(shù)是將 []byte 類型的原始數(shù)據(jù),利用 strconv.ParseFloat(string(reply), 64) 轉(zhuǎn)換成了 float64類型,因此在我們使用過程中返回值助手函數(shù)的選擇,應(yīng)該基于業(yè)務(wù)和實際存儲的數(shù)據(jù)格式為依據(jù)。我們以第一小節(jié)的示例為例,看返回值助手函數(shù)如何降低我們的工作量,具體如下:

      除了使用返回值助手函數(shù)對上述固定結(jié)構(gòu)的結(jié)果進(jìn)行解析外,redigo 包還提供了一個 Scan()函數(shù)用于解析自定義的復(fù)雜數(shù)據(jù)結(jié)構(gòu),我們依然以上一個示例進(jìn)行說明,具體示例如下:

      如果返回結(jié)果為結(jié)構(gòu)化切片,也可以使用 canSlice() 方法,從而簡化 loop 處理的部分,具體示例如下:

      通過上述的示例,我們介紹了 scan 函數(shù)的基本用法,但是細(xì)心的同學(xué)可能會發(fā)現(xiàn)嗎,為什么數(shù)據(jù)寫入時,value 的類型為 []int64 但是讀取時只能按照 string 類型讀取呢。這是因為 Redis 底層存儲的數(shù)據(jù)本質(zhì)都是 string 類型,。 無論是 HMSET 還是 MSET 最終都只能按照 string 類型讀取,因為其本質(zhì)都是 hash 結(jié)構(gòu),不同之處僅在于 HMSET 是嵌套的 hash類型。 因此,[]int64 數(shù)據(jù)在寫入階段,就已經(jīng)被自動處理為 []byte,寫入 redis 之后,len 和 類型 屬性會丟失。

      如果強行按照 []int64解析將出錯:

      如果 value 必須以結(jié)構(gòu)化的數(shù)據(jù)存儲,那么可以提前對要寫入的數(shù)據(jù)進(jìn)行編碼,例如 json、protobuf 等,取出后再進(jìn)行解碼獲得原始數(shù)據(jù)。

      當(dāng)每次新建一個類的時候,有什么方法讓myeclipse自動導(dǎo)入Scanner這個包呢?

      1.你不用管包什么的 直接把代碼全寫出來 再按 ctrl + shift +o 這是自動導(dǎo)包的 前提是你寫的代碼是正確的

      2.寫scanner的時候,不要自己全寫出來,寫四五個字母后讓myeclipse提示出來 就自動導(dǎo)包了

      golang mysql Scan操作按順序取值問題

      rows, err := db.Query("SELECT * FROM user")

      checkErr(err)

      for rows.Next() {

      var userId int

      var userName string

      var userAge int

      var userSex int

      rows.Columns()

      err = rows.Scan(userId, userName, userAge, userSex)

      checkErr(err)

      fmt.Println(userId)

      fmt.Println(userName)

      fmt.Println(userAge)

      fmt.Println(userSex)

      }


      分享名稱:go語言scan導(dǎo)入包的簡單介紹
      網(wǎng)頁網(wǎng)址:http://www.ef60e0e.cn/article/docoehe.html
      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区
      1. <ul id="0c1fb"></ul>

        <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
        <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

        旺苍县| 隆子县| 类乌齐县| 梅州市| 吉隆县| 泸西县| 永仁县| 桦川县| 平定县| 景洪市| 兴安县| 湛江市| 岑巩县| 巢湖市| 吴桥县| 林西县| 浮梁县| 城固县| 岳普湖县| 庆城县| 读书| 繁昌县| 东辽县| 扶绥县| 武安市| 肥乡县| 绥江县| 普兰店市| 论坛| 兴文县| 徐汇区| 奉化市| 隆子县| 旬邑县| 浮梁县| 宁乡县| 新竹县| 达孜县| 孟州市| 富顺县| 屯昌县|