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

golang中json小談之字符串轉(zhuǎn)浮點(diǎn)數(shù)的操作

 更新時(shí)間:2021年03月22日 14:49:03   作者:wu_sphinx  
這篇文章主要介紹了golang中json小談之字符串轉(zhuǎn)浮點(diǎn)數(shù)的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧

有時(shí)會(huì)有這種需求,將一個(gè)json數(shù)據(jù)形如:

{"x":"golang", "y":"520.1314"}

中的y反序列化為浮點(diǎn)類型,如果這樣寫(xiě):

package main
import (
  "encoding/json"
  "fmt"
)
type JsonTest struct {
  X string `json:"x"`
  Y float64 `json:"y"`
}
func main() {
  s := `{"x":"golang", "y":"520.1314"}`
  var jt JsonTest
  err := json.Unmarshal([]byte(s), &jt)
  if err == nil {
    fmt.Printf("%+v\n", jt)
  } else {
    fmt.Println(err)
    fmt.Printf("%+v\n", jt)
  }
}

會(huì)報(bào)錯(cuò):

json: cannot unmarshal string into Go struct field JsonTest.y of type float64

將結(jié)構(gòu)體JsonTest定義改為如下,即可解決戰(zhàn)斗:

type JsonTest struct {
  X string `json:"x"`
  Y float64 `json:"y,string"`
}

這樣寫(xiě)可以告訴golang的json解釋器變量y是被編碼成字符串的浮點(diǎn)數(shù)

補(bǔ)充:golang中struct、json、map互相轉(zhuǎn)化

一、Json和struct互換

(1)Json轉(zhuǎn)struct例子:

package main 
import (
    "fmt"
    "encoding/json"
)
 
type People struct {
    Name string `json:"name_title"`
    Age int `json:"age_size"`
}
 
func JsonToStructDemo(){
    jsonStr := `
    {
        "name_title": "jqw"
        "age_size":12
    }
    `
    var people People
    json.Unmarshal([]byte(jsonStr), &people)
    fmt.Println(people)
}
 
func main(){
    JsonToStructDemo()
}

輸出:

注意json里面的key和struct里面的key要一致,struct中的key的首字母必須大寫(xiě),而json中大小寫(xiě)都可以。

(2)struct轉(zhuǎn)json

在結(jié)構(gòu)體中引入tag標(biāo)簽,這樣匹配的時(shí)候json串對(duì)應(yīng)的字段名需要與tag標(biāo)簽中定義的字段名匹配,當(dāng)然tag中定義的名稱不需要首字母大寫(xiě),且對(duì)應(yīng)的json串中字段名仍然大小寫(xiě)不敏感。此時(shí),結(jié)構(gòu)體中對(duì)應(yīng)的字段名可以不用和匹配的一致,但是首字母必須大寫(xiě),只有大寫(xiě)才是可對(duì)外提供訪問(wèn)的。

例子:

package main 
import (
    "fmt"
    "encoding/json"
)
 
type People struct {
    Name string `json:"name_title"`
    Age int `json:"age_size"`
}
 
func StructToJsonDemo(){
    p := People{
        Name: "jqw",
        Age: 18,
    }
 
    jsonBytes, err := json.Marshal(p)
    if err != nil {
        fmt.Println(err)
    }
    fmt.Println(string(jsonBytes))
}
 
func main(){
    StructToJsonDemo()
}

輸出:

二、json和map互轉(zhuǎn)

(1)json轉(zhuǎn)map例子:

func JsonToMapDemo(){
    jsonStr := `
    {
        "name": "jqw",
        "age": 18
    }
    `
    var mapResult map[string]interface{}
    err := json.Unmarshal([]byte(jsonStr), &mapResult)
    if err != nil {
        fmt.Println("JsonToMapDemo err: ", err)
    }
    fmt.Println(mapResult)
}

輸出:

(2)map轉(zhuǎn)Json例子

func MapToJsonDemo1(){
    mapInstances := []map[string]interface{}{}
    instance_1 := map[string]interface{}{"name": "John", "age": 10}
    instance_2 := map[string]interface{}{"name": "Alex", "age": 12}
    mapInstances = append(mapInstances, instance_1, instance_2)
 
    jsonStr, err := json.Marshal(mapInstances)
 
    if err != nil {
        fmt.Println("MapToJsonDemo err: ", err)
    }
    fmt.Println(string(jsonStr))
}

輸出:

例2:

func MapToJsonDemo2(){
    b, _ := json.Marshal(map[string]int{"test":1, "try":2})
    fmt.Println(string(b))
}

輸出:

三、map和struct互轉(zhuǎn)

(1)map轉(zhuǎn)struct

需要安裝一個(gè)第三方庫(kù)

在命令行中運(yùn)行: go get github.com/goinggo/mapstructure

例子:

func MapToStructDemo(){
    mapInstance := make(map[string]interface{})
    mapInstance["Name"] = "jqw"
    mapInstance["Age"] = 18
 
    var people People
    err := mapstructure.Decode(mapInstance, &people)
    if err != nil {
        fmt.Println(err)
    }
    fmt.Println(people)
}

輸出

(2)struct轉(zhuǎn)map例子

func StructToMapDemo(obj interface{}) map[string]interface{}{
    obj1 := reflect.TypeOf(obj)
    obj2 := reflect.ValueOf(obj)
 
    var data = make(map[string]interface{})
    for i := 0; i < obj1.NumField(); i++ {
        data[obj1.Field(i).Name] = obj2.Field(i).Interface()
    }
    return data
}
func TestStructToMap(){
    student := Student{10, "jqw", 18}
    data := StructToMapDemo(student)
    fmt.Println(data)
}

輸出:

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。

相關(guān)文章

  • Golong字符串拼接性能優(yōu)化及原理介紹

    Golong字符串拼接性能優(yōu)化及原理介紹

    最近在做性能優(yōu)化,有個(gè)函數(shù)里面的耗時(shí)特別長(zhǎng),看里面的操作大多是一些字符串拼接的操作,而字符串拼接在 golang 里面其實(shí)有很多種實(shí)現(xiàn),下面這篇文章主要給大家介紹了關(guān)于Golang語(yǔ)言如何高效拼接字符串的相關(guān)資料,需要的朋友可以參考下
    2023-04-04
  • Go語(yǔ)言中你不知道的Interface詳解

    Go語(yǔ)言中你不知道的Interface詳解

    對(duì)于go語(yǔ)言來(lái)說(shuō),設(shè)計(jì)最精妙的應(yīng)該是interface了,直白點(diǎn)說(shuō)interface是一組method的組合。下面這篇文章主要給大家介紹了關(guān)于Go語(yǔ)言中你不知道的Interface的相關(guān)資料,需要的朋友可以參考借鑒,下面來(lái)一起看看吧。
    2018-02-02
  • go語(yǔ)言對(duì)文件按照指定塊大小進(jìn)行分割的方法

    go語(yǔ)言對(duì)文件按照指定塊大小進(jìn)行分割的方法

    這篇文章主要介紹了go語(yǔ)言對(duì)文件按照指定塊大小進(jìn)行分割的方法,實(shí)例分析了Go語(yǔ)言文件操作的技巧,需要的朋友可以參考下
    2015-03-03
  • Golang的Crypto/SHA256庫(kù)實(shí)戰(zhàn)指南

    Golang的Crypto/SHA256庫(kù)實(shí)戰(zhàn)指南

    無(wú)論是在保護(hù)數(shù)據(jù)安全、驗(yàn)證數(shù)據(jù)完整性,還是在構(gòu)建復(fù)雜的安全系統(tǒng)中,crypto/sha256都是Golang程序員不可或缺的工具,本文主要介紹了Golang的Crypto/SHA256庫(kù)實(shí)戰(zhàn)指南,感興趣的可以了解一下
    2024-02-02
  • Golang中的sync.WaitGroup用法實(shí)例

    Golang中的sync.WaitGroup用法實(shí)例

    這篇文章主要介紹了Golang中的sync.WaitGroup用法實(shí)例,WaitGroup的用途,它能夠一直等到所有的goroutine執(zhí)行完成,并且阻塞主線程的執(zhí)行,直到所有的goroutine執(zhí)行完成,需要的朋友可以參考下
    2015-07-07
  • 深入理解Go語(yǔ)言中的閉包

    深入理解Go語(yǔ)言中的閉包

    Go函數(shù)是可以閉包的。閉包是一個(gè)函數(shù)值,他來(lái)自函數(shù)體外部的變量引用。 下面這篇文章通過(guò)一個(gè)demo來(lái)進(jìn)行深入的介紹了Go語(yǔ)言中閉包的相關(guān)資料,文中介紹的非常詳細(xì),需要的朋友可以參考下。
    2017-03-03
  • go下載指定版本的依賴包圖文詳解

    go下載指定版本的依賴包圖文詳解

    由于依賴包的每個(gè)版本都有一個(gè)唯一的目錄,所以在多項(xiàng)目場(chǎng)景中需要使用同一個(gè)依賴包的多版本時(shí)才不會(huì)產(chǎn)生沖突,下面這篇文章主要給大家介紹了關(guān)于go下載指定版本的依賴包的相關(guān)資料,需要的朋友可以參考下
    2023-04-04
  • golang中context使用小結(jié)

    golang中context使用小結(jié)

    本文主要介紹了golang中context使用小結(jié),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-11-11
  • Go語(yǔ)言對(duì)接微信支付與退款指南(示例詳解)

    Go語(yǔ)言對(duì)接微信支付與退款指南(示例詳解)

    在互聯(lián)網(wǎng)技術(shù)日益發(fā)展的背景下,Go語(yǔ)言憑借并發(fā)處理能力,在后端開(kāi)發(fā)中大放異彩,本文詳細(xì)介紹如何使用Go語(yǔ)言對(duì)接微信支付,完成支付和退款功能,包括準(zhǔn)備工作、初始化微信支付客戶端、實(shí)現(xiàn)支付功能,以及處理支付回調(diào)和退款等
    2024-10-10
  • 使用Go語(yǔ)言實(shí)現(xiàn)LRU緩存的代碼詳解

    使用Go語(yǔ)言實(shí)現(xiàn)LRU緩存的代碼詳解

    在日常開(kāi)發(fā)中,緩存是提高系統(tǒng)性能的重要手段,LRU緩存是一種基于“最近最少使用”策略的緩存系統(tǒng),其目的是在空間受限的情況下保留最新、最常用的數(shù)據(jù),本文將詳細(xì)講解如何使用?Go?語(yǔ)言實(shí)現(xiàn)一個(gè)?LRU?緩存,需要的朋友可以參考下
    2024-11-11

最新評(píng)論

江安县| 松阳县| 汪清县| 四川省| 永寿县| 太原市| 漾濞| 和静县| 永康市| 射洪县| 宝鸡市| 剑河县| 阿瓦提县| 邵武市| 镇坪县| 大理市| 霍城县| 彭山县| 汉阴县| 鄱阳县| 获嘉县| 慈溪市| 永吉县| 平远县| 湘乡市| 四会市| 河北省| 琼海市| 海丰县| 文安县| 郁南县| 麻城市| 如皋市| 贺兰县| 钦州市| 乌拉特前旗| 仁怀市| 弋阳县| 石景山区| 五莲县| 潼关县|