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

Go語(yǔ)言中XML文件的讀寫(xiě)操作

 更新時(shí)間:2023年04月03日 10:05:10   作者:C語(yǔ)言中文網(wǎng)  
本文主要介紹了Go語(yǔ)言中XML文件的讀寫(xiě)操作,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

XML(extensible Markup Language)格式被廣泛用作一種數(shù)據(jù)交換格式,并且自成一種文件格式。與上一節(jié)介紹的 JSON 相比 XML 要復(fù)雜得多,而且手動(dòng)寫(xiě)起來(lái)相對(duì)乏味得多。

在 JSON 還未像現(xiàn)在這么廣泛使用時(shí),XML 的使用相當(dāng)廣泛。XML 作為一種數(shù)據(jù)交換和信息傳遞的格式,使用還是很廣泛的,現(xiàn)在很多開(kāi)放平臺(tái)接口,基本都會(huì)支持 XML 格式。

Go語(yǔ)言內(nèi)置的 encoding/xml 包可以用在結(jié)構(gòu)體和 XML 格式之間進(jìn)行編解碼,其方式跟 encoding/json 包類似。然而與 JSON 相比 XML 的編碼和解碼在功能上更苛刻得多,這是由于 encoding/xml 包要求結(jié)構(gòu)體的字段包含格式合理的標(biāo)簽,而 JSON 格式卻不需要。

寫(xiě) XML 文件

使用 encoidng/xml 包可以很方便的將 xml 數(shù)據(jù)存儲(chǔ)到文件中,示例代碼如下:

package main
import (
    "encoding/xml"
    "fmt"
    "os"
)
type Website struct {
    Name   string `xml:"name,attr"`
    Url    string
    Course []string
}
func main() {
    //實(shí)例化對(duì)象
    info := Website{"腳本之家", "http://jb51.net/golang/", []string{"Go語(yǔ)言入門(mén)教程", "Golang入門(mén)教程"}}
    f, err := os.Create("./info.xml")
    if err != nil {
        fmt.Println("文件創(chuàng)建失敗", err.Error())
        return
    }
    defer f.Close()
    //序列化到文件中
    encoder := xml.NewEncoder(f)
    err = encoder.Encode(info)
    if err != nil {
        fmt.Println("編碼錯(cuò)誤:", err.Error())
        return
    } else {
        fmt.Println("編碼成功")
    }
}

運(yùn)行上面的代碼會(huì)在當(dāng)前目錄生成一個(gè) info.xml 文件,文件的內(nèi)容如下所示:

<Website name="腳本之家">
    <Url>http://jb51.net/golang/</Url>
    <Course>Go語(yǔ)言入門(mén)教程</Course>
    <Course>Golang入門(mén)教程</Course>
</Website>

讀 XML 文件

讀 XML 文件比寫(xiě) XML 文件稍微復(fù)雜,特別是在必須處理一些我們自定義字段的時(shí)候(例如日期)。但是,如果我們使用合理的打上 XML 標(biāo)簽的結(jié)構(gòu)體,就不會(huì)復(fù)雜。示例代碼如下:

package main
import (
    "encoding/xml"
    "fmt"
    "os"
)
type Website struct {
    Name   string `xml:"name,attr"`
    Url    string
    Course []string
}
func main() {
    //打開(kāi)xml文件
    file, err := os.Open("./info.xml")
    if err != nil {
        fmt.Printf("文件打開(kāi)失?。?v", err)
        return
    }
    defer file.Close()
    info := Website{}
    //創(chuàng)建 xml 解碼器
    decoder := xml.NewDecoder(file)
    err = decoder.Decode(&info)
    if err != nil {
        fmt.Printf("解碼失?。?v", err)
        return
    } else {
        fmt.Println("解碼成功")
        fmt.Println(info)
    }
}

運(yùn)行結(jié)果如下:

go run main.go
解碼成功
{腳本之家 http://jb51.net/golang/ [Go語(yǔ)言入門(mén)教程 Golang入門(mén)教程]}

正如寫(xiě) XML 時(shí)一樣,我們無(wú)需關(guān)心對(duì)所讀取的 XML 數(shù)據(jù)進(jìn)行轉(zhuǎn)義,xml.NewDecoder.Decode() 函數(shù)會(huì)自動(dòng)處理這些。

xml 包還支持更為復(fù)雜的標(biāo)簽,包括嵌套。例如標(biāo)簽名為 'xml:"Books>Author"' 產(chǎn)生的是 <Books><Author>content</Author></Books> 這樣的 XML 內(nèi)容。同時(shí)除了 'xml:", attr"' 之外,該包還支持 'xml:",chardata"' 這樣的標(biāo)簽表示將該字段當(dāng)做字符數(shù)據(jù)來(lái)寫(xiě),支持 'xml:",innerxml"' 這樣的標(biāo)簽表示按照字面量來(lái)寫(xiě)該字段,以及 'xml:",comment"' 這樣的標(biāo)簽表示將該字段當(dāng)做 XML 注釋。因此,通過(guò)使用標(biāo)簽化的結(jié)構(gòu)體,我們可以充分利用好這些方便的編碼解碼函數(shù),同時(shí)合理控制如何讀寫(xiě) XML 數(shù)據(jù)。

到此這篇關(guān)于Go語(yǔ)言中XML文件的讀寫(xiě)操作的文章就介紹到這了,更多相關(guān)Go語(yǔ)言XML文件讀寫(xiě)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • go編程中g(shù)o-sql-driver的離奇bug解決記錄分析

    go編程中g(shù)o-sql-driver的離奇bug解決記錄分析

    這篇文章主要為大家介紹了go編程中g(shù)o-sql-driver的離奇bug解決記錄分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-05-05
  • 在Go網(wǎng)絡(luò)請(qǐng)求中配置代理的方法詳解

    在Go網(wǎng)絡(luò)請(qǐng)求中配置代理的方法詳解

    這篇文章主要給大家介紹了如何在Go網(wǎng)絡(luò)請(qǐng)求中配置代理的方法,文章通過(guò)代碼示例介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2023-09-09
  • Go語(yǔ)言排序算法:快速、可靠的排序解決方案

    Go語(yǔ)言排序算法:快速、可靠的排序解決方案

    Go語(yǔ)言提供了多種快速、可靠的排序算法,可以滿足不同場(chǎng)景下的排序需求,其中最常用的排序算法包括快速排序、歸并排序和堆排序,需要的朋友可以參考下
    2023-10-10
  • 詳解Golang中NewTimer計(jì)時(shí)器的底層實(shí)現(xiàn)原理

    詳解Golang中NewTimer計(jì)時(shí)器的底層實(shí)現(xiàn)原理

    本文將主要介紹一下Go語(yǔ)言中的NewTimer,首先展示基于NewTimer創(chuàng)建的定時(shí)器來(lái)實(shí)現(xiàn)超時(shí)控制。接著通過(guò)一系列問(wèn)題的跟進(jìn),展示了NewTimer的底層實(shí)現(xiàn)原理,需要的可以參考一下
    2023-05-05
  • Go語(yǔ)言寫(xiě)入字符串到文件的方法

    Go語(yǔ)言寫(xiě)入字符串到文件的方法

    這篇文章主要介紹了Go語(yǔ)言寫(xiě)入字符串到文件的方法,實(shí)例分析了Go語(yǔ)言操作字符串及文本的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-02-02
  • Go語(yǔ)言使用Redis和Etcd實(shí)現(xiàn)高性能分布式鎖

    Go語(yǔ)言使用Redis和Etcd實(shí)現(xiàn)高性能分布式鎖

    這篇文章主要為大家介紹了Go語(yǔ)言使用Redis實(shí)現(xiàn)高性能分布式鎖示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-12-12
  • 用GO實(shí)現(xiàn)IP門(mén)禁優(yōu)化網(wǎng)絡(luò)流量管理

    用GO實(shí)現(xiàn)IP門(mén)禁優(yōu)化網(wǎng)絡(luò)流量管理

    這篇文章主要為大家介紹了用GO實(shí)現(xiàn)IP門(mén)禁優(yōu)化網(wǎng)絡(luò)流量管理,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-12-12
  • Go語(yǔ)言實(shí)現(xiàn)逐行讀取和寫(xiě)入文件詳解

    Go語(yǔ)言實(shí)現(xiàn)逐行讀取和寫(xiě)入文件詳解

    這篇文章主要介紹了如何使用go語(yǔ)言實(shí)現(xiàn)從輸入文件中讀取每行數(shù)據(jù),然后將每行字段組合成SQL插入腳本,然后逐行寫(xiě)入另外一個(gè)空白文件中,有需要的可以參考下
    2024-01-01
  • 在Golang中執(zhí)行Shell命令的教程詳解

    在Golang中執(zhí)行Shell命令的教程詳解

    在本教程中,我們將學(xué)習(xí)如何在 Golang 中執(zhí)行shell命令(如 ls、mkdir 或 grep ),我們還將學(xué)習(xí)如何通過(guò) stdin 和 stdout 傳遞 I/O 到正在運(yùn)行的命令,以及管理長(zhǎng)時(shí)間運(yùn)行的命令,感興趣的同學(xué)可以借鑒一下
    2023-05-05
  • 如何在golang中檢查文件是否存在

    如何在golang中檢查文件是否存在

    如果你用的是?Python,可通過(guò)?os.path.exists?這樣的標(biāo)準(zhǔn)庫(kù)函數(shù)實(shí)現(xiàn),遺憾的是,Go?標(biāo)準(zhǔn)庫(kù)沒(méi)有提供這樣直接的函數(shù),所以下面我們就來(lái)了解下如何使用GO語(yǔ)言能實(shí)現(xiàn)檢查文件是否存在呢
    2024-02-02

最新評(píng)論

左贡县| 日喀则市| 齐河县| 建始县| 奎屯市| 永德县| 河曲县| 凤城市| 海安县| 永嘉县| 三明市| 敦化市| 咸阳市| 扶风县| 思茅市| 宁夏| 阿巴嘎旗| 分宜县| 云南省| 通许县| 鄂伦春自治旗| 武功县| 镇沅| 洪洞县| 贡觉县| 蒙山县| 黄山市| 遂平县| 绩溪县| 宜宾市| 定结县| 甘泉县| 巢湖市| 卢湾区| 突泉县| 来凤县| 闸北区| 怀安县| 那坡县| 沅江市| 广州市|