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

Go語言中XML文件的讀寫操作

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

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

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

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

寫 XML 文件

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

package main
import (
    "encoding/xml"
    "fmt"
    "os"
)
type Website struct {
    Name   string `xml:"name,attr"`
    Url    string
    Course []string
}
func main() {
    //實例化對象
    info := Website{"腳本之家", "http://jb51.net/golang/", []string{"Go語言入門教程", "Golang入門教程"}}
    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("編碼錯誤:", err.Error())
        return
    } else {
        fmt.Println("編碼成功")
    }
}

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

<Website name="腳本之家">
    <Url>http://jb51.net/golang/</Url>
    <Course>Go語言入門教程</Course>
    <Course>Golang入門教程</Course>
</Website>

讀 XML 文件

讀 XML 文件比寫 XML 文件稍微復雜,特別是在必須處理一些我們自定義字段的時候(例如日期)。但是,如果我們使用合理的打上 XML 標簽的結構體,就不會復雜。示例代碼如下:

package main
import (
    "encoding/xml"
    "fmt"
    "os"
)
type Website struct {
    Name   string `xml:"name,attr"`
    Url    string
    Course []string
}
func main() {
    //打開xml文件
    file, err := os.Open("./info.xml")
    if err != nil {
        fmt.Printf("文件打開失?。?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)
    }
}

運行結果如下:

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

正如寫 XML 時一樣,我們無需關心對所讀取的 XML 數(shù)據(jù)進行轉義,xml.NewDecoder.Decode() 函數(shù)會自動處理這些。

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

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

相關文章

  • go編程中go-sql-driver的離奇bug解決記錄分析

    go編程中go-sql-driver的離奇bug解決記錄分析

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

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

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

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

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

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

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

    Go語言寫入字符串到文件的方法

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

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

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

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

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

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

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

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

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

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

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

最新評論

衡水市| 海盐县| 自贡市| 广汉市| 集贤县| 揭阳市| 白朗县| 横峰县| 拉萨市| 台前县| 琼海市| 洛川县| 屏东县| 平陆县| 土默特左旗| 祁东县| 云南省| 景德镇市| 尉氏县| 南岸区| 九寨沟县| 崇信县| 周至县| 察哈| 弥渡县| 东乡| 华坪县| 临夏市| 四会市| 娄底市| 莲花县| 张北县| 丘北县| 苍梧县| 富阳市| 榆中县| 临邑县| 北京市| 宁乡县| 安泽县| 中山市|