国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

PHP轉(zhuǎn)Go實(shí)踐:xjson解析神器「開源工具集」

這篇具有很好參考價(jià)值的文章主要介紹了PHP轉(zhuǎn)Go實(shí)踐:xjson解析神器「開源工具集」。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

前言

近期會(huì)更新一系列開源項(xiàng)目的文章,新的一年會(huì)和大家做更多的開源項(xiàng)目,也歡迎大家加入進(jìn)來。

xutil

今天分享的文章源自于開源項(xiàng)目jinzaigo/xutil的封裝。

在封裝過程中,勁仔將實(shí)現(xiàn)原理以及相關(guān)實(shí)踐思考,寫成文章分享出來,從而匯總系列文章集合。

PHP轉(zhuǎn)Go

我和勁仔都是PHP轉(zhuǎn)Go,身邊越來越多做PHP的朋友也逐漸在用Go進(jìn)行重構(gòu),重構(gòu)過程中,會(huì)發(fā)現(xiàn)php的json解析操作(系列化與反序列化)是真的香,弱類型語言的各種隱式類型轉(zhuǎn)換,很大程度的減低了程序的復(fù)雜度。

反觀go使用標(biāo)準(zhǔn)庫encoding/json,來做json解析就沒有那么愉快了(只要數(shù)據(jù)類型定義不對,就很容易拋error)

JSON解析實(shí)踐

案例:用go重構(gòu)的服務(wù),對接的上游還是php服務(wù),這時(shí)php接口輸出的json串為{"name":"AppleWatchS8","price":"3199"}

其中price字段應(yīng)該得為float類型,但由于php弱類型語言,沒有強(qiáng)制約束輸出類型的機(jī)制,就很容易出現(xiàn)這種輸出類型不對的情況,然后到go服務(wù)里得怎么處理呢?

標(biāo)準(zhǔn)庫encoding/json

package main

import (
  "encoding/json"
  "fmt"
)

type ProductInfo struct {
  Name  string  `json:"name"`
  Price float32 `json:"price"`
}

func main() {
  str := "{"name":"AppleWatchS8","price":"3199"}"
  data := ProductInfo{}
  if err := json.Unmarshal([]byte(str), &data); err != nil {
    fmt.Println("error: " + err.Error())
  } else {
    fmt.Println(data)
  }
}

//輸出結(jié)果
//error: json: cannot unmarshal string into Go struct field ProductInfo.price of type float32

顯然,使用go標(biāo)準(zhǔn)庫做json解析,是應(yīng)對不了這種類型不一致的情況的。下面則借助第三方庫的能力來做處理

第三方庫json-iterator

簡單介紹:

執(zhí)行速度:jsoniter 的 Golang 版本可以比標(biāo)準(zhǔn)庫(encoding/json)快 6 倍之多

兩個(gè)特點(diǎn):

  1. 完全兼容標(biāo)準(zhǔn)庫,也就是API用法完全一樣,原有邏輯代碼不需要改動(dòng),只需要替換import包名

  2. 提供了一個(gè)PHP兼容模式,可以自動(dòng)轉(zhuǎn)換字符串/數(shù)字弱類型問題,可以將空數(shù)組[]轉(zhuǎn)換為空結(jié)構(gòu)體(解決PHP中的array輸出為[]的問題)。注意,該兼容模式需要手動(dòng)開啟

安裝方式:

go get -u github.com/json-iterator/go

具體代碼實(shí)現(xiàn):

package main

import (
  "fmt"
  jsoniter "github.com/json-iterator/go"
  "github.com/json-iterator/go/extra"
)

var json = jsoniter.ConfigCompatibleWithStandardLibrary

func init() {
  extra.RegisterFuzzyDecoders() //開啟PHP兼容模式
}

type ProductInfo struct {
  Name  string  `json:"name"`
  Price float32 `json:"price"`
}

func main() {
  str := "{"name":"AppleWatchS8","price":"3199"}"
  data := ProductInfo{}
  if err := json.Unmarshal([]byte(str), &data); err != nil {
    fmt.Println("error: " + err.Error())
  } else {
    fmt.Println(data)
  }
}

//輸出結(jié)果
//{AppleWatchS8 3199}

看輸出結(jié)果,會(huì)發(fā)現(xiàn)用了這個(gè)庫并且開啟了PHP兼容模式,json中price字段string類型,就會(huì)自動(dòng)轉(zhuǎn)換為結(jié)構(gòu)體中定義的float32類型。

這樣我們在使用price字段處理業(yè)務(wù)邏輯時(shí),就只需要按float32做處理就行,不用進(jìn)行類型斷言。這個(gè)庫解決了json解析類型轉(zhuǎn)換問題的同時(shí),也能極大的提高我們開發(fā)效率。

收集到開源工具包xutil中

這個(gè)第三庫用起來如此方便,那肯定是要收錄進(jìn)來的,將替換包名、手動(dòng)開啟PHP兼容模式、還有常用的API方法(系列化與反序列化操作),統(tǒng)一封裝進(jìn)來,簡化使用流程。

同時(shí),為了便于后續(xù)擴(kuò)展更多的兼容模式,所以將代碼都放在xjson目錄下

php項(xiàng)目轉(zhuǎn)go需要多久,Go語言學(xué)習(xí)專欄,開源,php,golang,json,后端,開源工具

以上這個(gè)思路也適用于大家封裝自己內(nèi)部使用的工具庫。

使用示例:

go get -u github.com/jinzaigo/xutil之后,

import github.com/jinzaigo/xutil/xjson,

即可通過xjson.Unmarshal()等方法,進(jìn)行json解析操作。

示例代碼:

package main

import (
  "fmt"
  "github.com/jinzaigo/xutil/xjson"
)

type ProductInfo struct {
  Name  string  `json:"name"`
  Price float32 `json:"price"`
}

func main() {
  str := "{"name":"AppleWatchS8","price":"3199"}"
  data := ProductInfo{}
  if err := xjson.Unmarshal([]byte(str), &data); err != nil {
    fmt.Println("error: " + err.Error())
  } else {
    fmt.Println(data)
  }
}

總結(jié)

業(yè)務(wù)系統(tǒng)從php轉(zhuǎn)go,或go對接php服務(wù),都會(huì)遇到這個(gè)因?yàn)閿?shù)據(jù)類型不一致導(dǎo)致json解析錯(cuò)誤的共性問題。

使用第三方庫json-iterator能很好的解決我們的痛點(diǎn),并且比標(biāo)準(zhǔn)庫執(zhí)行速度還更快。

收錄到開源項(xiàng)目中,更好的幫助到需要的朋友。

一起學(xué)習(xí)

歡迎在CSDN私信我,也歡迎 加我好友 一起學(xué)習(xí)。文章來源地址http://www.zghlxwxcb.cn/news/detail-779381.html

到了這里,關(guān)于PHP轉(zhuǎn)Go實(shí)踐:xjson解析神器「開源工具集」的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Go 工具鏈詳解(三): 代碼測試神器 go test

    go test 是 Go 工具鏈中的一個(gè)命令,用于編譯和運(yùn)行按照要求編寫的 Golang 測試代碼,并生成測試報(bào)告。 要求將測試代碼所在的文件命名為 *_test.go,如此命名的文件不會(huì)被 go build?命令編譯,但是會(huì)被 go test 進(jìn)行編譯和運(yùn)行。在 *_test.go 中有幾種類型的函數(shù): 單元測試函數(shù):以

    2024年02月16日
    瀏覽(25)
  • 使用開源免費(fèi)AI繪圖工具神器-Stable Diffusion懶人整合包

    使用開源免費(fèi)AI繪圖工具神器-Stable Diffusion懶人整合包

    Stable Diffusion (簡稱 SD) 是一款開源免費(fèi)的以文生圖的 AI 擴(kuò)散模型,它和付費(fèi)的 Midjourney 被人稱為當(dāng)下最好用的 AI 繪畫工具。你在網(wǎng)上看到的絕大多數(shù)優(yōu)秀 AI 圖片作品,基本都是出自它倆之手。其中 Midjourney 是在線服務(wù) (需綁信用卡付費(fèi)),而 Stable Diffusion 則完全免費(fèi),可在自

    2024年02月09日
    瀏覽(21)
  • 好用到爆!10個(gè)你可能不知道的VSCode開源工具神器

    作為一款廣受歡迎的開源IDE,VSCode憑借其輕量級和高度可擴(kuò)展的特性,成為了越來越多開發(fā)者的首選工具。但是,VSCode的強(qiáng)大功能并不僅限于其本身,是可以通過插件、主題和其他擴(kuò)展來進(jìn)一步擴(kuò)展其功能。在本篇文章中,我將介紹10個(gè)原先你可能根本不知道的開源工具,這

    2024年02月11日
    瀏覽(18)
  • 前端二維碼生成工具小程序:構(gòu)建營銷神器的技術(shù)解析

    前端二維碼生成工具小程序:構(gòu)建營銷神器的技術(shù)解析

    摘要: 隨著數(shù)字化營銷的不斷深入,二維碼作為一種快速、便捷的信息傳遞方式,已經(jīng)廣泛應(yīng)用于各個(gè)領(lǐng)域。本文旨在探討如何通過前端技術(shù)構(gòu)建一個(gè)功能豐富、操作簡便的二維碼生成工具小程序,為企業(yè)和個(gè)人提供高效的營銷支持。 一、引言 二維碼作為一種特殊的編碼方

    2024年04月14日
    瀏覽(21)
  • Go命令大全:全面解析與實(shí)踐

    Go命令大全:全面解析與實(shí)踐

    本文詳盡地探討了Go語言的內(nèi)建命令集,包括但不限于go build、go run、go get等。文章首先列舉了所有常用的Go命令,并用表格形式簡潔地解釋了它們的功能。隨后,我們逐一深入講解了每個(gè)命令的使用說明、應(yīng)用場景,以及實(shí)際操作中可能遇到的輸出結(jié)果。 關(guān)注【TechLeadCloud】

    2024年02月08日
    瀏覽(20)
  • Go 命令大全:全面解析與實(shí)踐

    Go 命令大全:全面解析與實(shí)踐

    在這部分,我們將通過一個(gè)表格來快速瀏覽Go語言的所有內(nèi)建命令及其基本功能。這些命令涵蓋了從代碼構(gòu)建、測試,到依賴管理和其他工具等方面。 命令 功能描述 go build 編譯Go源文件 go run 編譯并運(yùn)行Go程序 go get 下載并安裝依賴或項(xiàng)目 go mod Go模塊支持 go list 列出包或模塊

    2024年02月08日
    瀏覽(87)
  • 【工具分享】程序員在線工具集(json格式化-html格式化-加密工具)

    演示地址 在線工具集 功能介紹 json格式化 。 JSON 可以將程序語言對象中表示的一組數(shù)據(jù)轉(zhuǎn)換為字符串,然后就可以在網(wǎng)絡(luò)或者程序之間輕松地傳遞這個(gè)字符串,并在需要的時(shí)候?qū)⑺€原為各編程語言所支持的數(shù)據(jù)格式,例如在 PHP 中,可以將 JSON還原為數(shù)組或者一個(gè)基本對象

    2024年02月12日
    瀏覽(95)
  • Go開源世界主流成熟ORM框架gorm實(shí)踐分享

    Go開源世界主流成熟ORM框架gorm實(shí)踐分享

    @ 目錄 概述 定義 核心功能 聲明模型與約定 gorm.Model 字段級權(quán)限 時(shí)間慣例 嵌入結(jié)構(gòu) 字段標(biāo)簽 使用 安裝 數(shù)據(jù)庫鏈接 連接池 CRUD 接口 創(chuàng)建 查詢 高級查詢 修改 刪除 原始SQL 事務(wù) 轉(zhuǎn)換 分片 序列化 GORM 官網(wǎng)地址 https://gorm.io/ 最新版本v1.25.1 GORM 官網(wǎng)文檔地址 https://gorm.io/docs/ G

    2024年02月05日
    瀏覽(73)
  • Kali工具集簡介

    Kali工具集簡介

    Kali Linux提供了數(shù)種經(jīng)過定制的專門為滲透測試設(shè)計(jì)的工具。工具都會(huì)按下圖中下拉選單所示的方式按組分類聚合。了解工具是做滲透測試第一個(gè)認(rèn)知。 口Information Gathering(信息收集) 這些都是偵察工具,用來收集目標(biāo)網(wǎng)絡(luò)和設(shè)備的數(shù)據(jù)。在這類工具中,從找出設(shè)備的工具到查

    2024年02月05日
    瀏覽(26)
  • 國內(nèi) AI 工具集

    國內(nèi) AI 工具集

    序號 類型 AI工具名稱 入口 功能 聊天/內(nèi)容生成 1 文心一言 https://yiyan.baidu.com 綜合型AI:內(nèi)容生成、文檔分析、圖像分析、圖表制作、腦圖…… 2 通義千問 https://tongyi.aliyun.com 綜合型AI:內(nèi)容生成、文檔分析、圖像分析…… 3 Kimi(月之暗面) https://kimi.moonshot.cn 綜合型AI:內(nèi)容生

    2024年04月17日
    瀏覽(36)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包