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

使用go語(yǔ)言解析xml的實(shí)現(xiàn)方法(必看篇)

 更新時(shí)間:2017年06月11日 08:33:24   投稿:jingxian  
下面小編就為大家?guī)?lái)一篇使用go語(yǔ)言解析xml的實(shí)現(xiàn)方法(必看篇)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧

操作系統(tǒng): CentOS 6.9_x64

go語(yǔ)言版本: 1.8.3

問(wèn)題描述

現(xiàn)有一個(gè)自動(dòng)報(bào)障程序,如果服務(wù)出錯(cuò)會(huì)自動(dòng)給指定人發(fā)送郵件,配置文件內(nèi)容如下(default.xml):

<?xml version="1.0" encoding="UTF-8"?>
<config>
  <smtpServer>smtp.163.com</smtpServer>
  <smtpPort>25</smtpPort>
  <sender>user@163.com</sender>
  <senderPasswd>123456</senderPasswd>
  <receivers flag="true">
    <user>Mike_Zhang@live.com</user>
    <user>test1@qq.com</user>
  </receivers>
</config>

該配置以config為root標(biāo)簽,有xml text部分(比如smtpServer標(biāo)簽)、嵌套xml(receivers標(biāo)簽)、有xml attribute部分(receivers標(biāo)簽的flag)、類似數(shù)組的多行配置(user標(biāo)簽), 數(shù)據(jù)類型有字符串和數(shù)字兩種類型。

解決方案

package main

import (
  "encoding/xml"
  "fmt"
  "io/ioutil"
  "os"
)

type SConfig struct {
  XMLName  xml.Name `xml:"config"` // 指定最外層的標(biāo)簽為config
  SmtpServer string `xml:"smtpServer"` // 讀取smtpServer配置項(xiàng),并將結(jié)果保存到SmtpServer變量中
  SmtpPort int `xml:"smtpPort"`
  Sender string `xml:"sender"`
  SenderPasswd string `xml:"senderPasswd"`
  Receivers SReceivers `xml:"receivers"` // 讀取receivers標(biāo)簽下的內(nèi)容,以結(jié)構(gòu)方式獲取
}

type SReceivers struct {
  Flag string `xml:"flag,attr"` // 讀取flag屬性
  User []string `xml:"user"` // 讀取user數(shù)組
}

func main() {
  file, err := os.Open("default.xml") // For read access.
  if err != nil {
    fmt.Printf("error: %v", err)
    return
  }
  defer file.Close()
  data, err := ioutil.ReadAll(file)
  if err != nil {
    fmt.Printf("error: %v", err)
    return
  }
  v := SConfig{}
  err = xml.Unmarshal(data, &v)
  if err != nil {
    fmt.Printf("error: %v", err)
    return
  }

  fmt.Println(v)
  fmt.Println("SmtpServer : ",v.SmtpServer)
  fmt.Println("SmtpPort : ",v.SmtpPort)
  fmt.Println("Sender : ",v.Sender)
  fmt.Println("SenderPasswd : ",v.SenderPasswd)
  fmt.Println("Receivers.Flag : ",v.Receivers.Flag)
  for i,element := range v.Receivers.User {
    fmt.Println(i,element)
  }
}

運(yùn)行效果:

[root@local t1]# ls
default.xml xmlCnfTest1.go
[root@local t1]# go run xmlCnfTest1.go
{{ config} smtp.163.com 25 user@163.com 123456 {true [Mike_Zhang@live.com test1@qq.com]}}
SmtpServer : smtp.163.com
SmtpPort : 25
Sender : user@163.com
SenderPasswd : 123456
Receivers.Flag : true
Mike_Zhang@live.com
test1@qq.com
[root@local t1]#

討論

如果需要直接從字符串解析xml配置,可將如下語(yǔ)句中的data替換即可:

err = xml.Unmarshal(data, &v)

比如:

err = xml.Unmarshal([]byte(ConfigContent), &v) // ConfigContent為xml字符串

好,就這些了,希望對(duì)你有幫助。

以上這篇使用go語(yǔ)言解析xml的實(shí)現(xiàn)方法(必看篇)就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • GoLang BoltDB數(shù)據(jù)庫(kù)詳解

    GoLang BoltDB數(shù)據(jù)庫(kù)詳解

    這篇文章主要介紹了GoLang BoltDB數(shù)據(jù)庫(kù),boltdb是使用Go語(yǔ)言編寫的開(kāi)源的鍵值對(duì)數(shù)據(jù)庫(kù),boltdb存儲(chǔ)數(shù)據(jù)時(shí) key和value都要求是字節(jié)數(shù)據(jù),此處需要使用到 序列化和反序列化
    2023-02-02
  • Go構(gòu)建高性能的事件管理器實(shí)例詳解

    Go構(gòu)建高性能的事件管理器實(shí)例詳解

    這篇文章主要為大家介紹了Go構(gòu)建高性能的事件管理器實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-12-12
  • Go?語(yǔ)言數(shù)據(jù)結(jié)構(gòu)如何實(shí)現(xiàn)抄一個(gè)list示例詳解

    Go?語(yǔ)言數(shù)據(jù)結(jié)構(gòu)如何實(shí)現(xiàn)抄一個(gè)list示例詳解

    這篇文章主要為大家介紹了Go?語(yǔ)言數(shù)據(jù)結(jié)構(gòu)如何實(shí)現(xiàn)抄一個(gè)list示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-04-04
  • Go定時(shí)器的三種實(shí)現(xiàn)方式示例詳解

    Go定時(shí)器的三種實(shí)現(xiàn)方式示例詳解

    這篇文章主要為大家介紹了Go定時(shí)器的三種實(shí)現(xiàn)方式示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12
  • 在ubuntu下構(gòu)建go語(yǔ)言開(kāi)發(fā)環(huán)境的方法

    在ubuntu下構(gòu)建go語(yǔ)言開(kāi)發(fā)環(huán)境的方法

    這篇文章主要介紹了在ubuntu下構(gòu)建go語(yǔ)言開(kāi)發(fā)環(huán)境的方法,需要的朋友可以參考下
    2014-10-10
  • Go語(yǔ)言中日志統(tǒng)一處理詳解

    Go語(yǔ)言中日志統(tǒng)一處理詳解

    在現(xiàn)代軟件開(kāi)發(fā)中,日志記錄是一項(xiàng)至關(guān)重要的任務(wù),它不僅幫助開(kāi)發(fā)人員診斷問(wèn)題,還有助于監(jiān)控和維護(hù)應(yīng)用程序,本文主要來(lái)和大家聊聊日志的統(tǒng)一處理,感興趣的小伙伴可以了解下
    2024-01-01
  • Go語(yǔ)言入門教程之基礎(chǔ)語(yǔ)法快速入門

    Go語(yǔ)言入門教程之基礎(chǔ)語(yǔ)法快速入門

    這篇文章主要介紹了Go語(yǔ)言入門教程之基礎(chǔ)語(yǔ)法快速入門,本文講解了值類型、變量、常量、循環(huán)、條件語(yǔ)句、條件枚舉等內(nèi)容,需要的朋友可以參考下
    2014-11-11
  • go實(shí)現(xiàn)Redis讀寫分離示例詳解

    go實(shí)現(xiàn)Redis讀寫分離示例詳解

    本篇文章將介紹Redis通信協(xié)議RESP,?而后在使用go來(lái)編寫一個(gè)中間件,從而來(lái)完成Redis讀寫分離,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • 淺談Go中數(shù)字轉(zhuǎn)換字符串的正確姿勢(shì)

    淺談Go中數(shù)字轉(zhuǎn)換字符串的正確姿勢(shì)

    這篇文章主要介紹了淺談Go中數(shù)字轉(zhuǎn)換字符串的正確姿勢(shì),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10
  • Go官方限流器的用法詳解

    Go官方限流器的用法詳解

    限流器是提升服務(wù)穩(wěn)定性的非常重要的組件,本文主要介紹了Go官方限流器的用法,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-05-05

最新評(píng)論

阿坝| 桂平市| 怀仁县| 贵州省| 广德县| 宁津县| 福安市| 灌南县| 鄂尔多斯市| 武城县| 石林| 富民县| 喀什市| 贡觉县| 平阳县| 旬邑县| 高安市| 玉屏| 邯郸县| 林口县| 宁明县| 唐海县| 共和县| 当雄县| 清徐县| 平罗县| 页游| 凤城市| 新疆| 肥西县| 泉州市| 汽车| 博客| 铜陵市| 梁山县| 含山县| 钦州市| 青海省| 滨州市| 拉萨市| 辛集市|