欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

使用go語言解析xml的實現方法(必看篇)

 更新時間:2017年06月11日 08:33:24   投稿:jingxian  
下面小編就為大家?guī)硪黄褂胓o語言解析xml的實現方法(必看篇)。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

操作系統: CentOS 6.9_x64

go語言版本: 1.8.3

問題描述

現有一個自動報障程序,如果服務出錯會自動給指定人發(fā)送郵件,配置文件內容如下(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標簽,有xml text部分(比如smtpServer標簽)、嵌套xml(receivers標簽)、有xml attribute部分(receivers標簽的flag)、類似數組的多行配置(user標簽), 數據類型有字符串和數字兩種類型。

解決方案

package main

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

type SConfig struct {
  XMLName  xml.Name `xml:"config"` // 指定最外層的標簽為config
  SmtpServer string `xml:"smtpServer"` // 讀取smtpServer配置項,并將結果保存到SmtpServer變量中
  SmtpPort int `xml:"smtpPort"`
  Sender string `xml:"sender"`
  SenderPasswd string `xml:"senderPasswd"`
  Receivers SReceivers `xml:"receivers"` // 讀取receivers標簽下的內容,以結構方式獲取
}

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

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)
  }
}

運行效果:

[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配置,可將如下語句中的data替換即可:

err = xml.Unmarshal(data, &v)

比如:

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

好,就這些了,希望對你有幫助。

以上這篇使用go語言解析xml的實現方法(必看篇)就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • 詳解Go語言如何檢查系統命令是否可用

    詳解Go語言如何檢查系統命令是否可用

    這篇文章主要為大家詳細介紹了Go語言通過編寫一個函數,利用Go語言標準庫中的功能來檢查系統命令是否可用,感興趣的小伙伴可以跟隨小編一起學習一下
    2024-01-01
  • 淺析golang如何處理json中的null

    淺析golang如何處理json中的null

    json?是一種常用的數據格式,在?go?使用?json?序列化和反序列化時比較方便的,但在使用過程中,會遇到一些問題,比如?null,所以下面我們就來看看golang如何處理json中的null吧
    2023-09-09
  • Go?分布式鏈路追蹤實現原理解析

    Go?分布式鏈路追蹤實現原理解析

    分布式鏈路追蹤作為解決分布式應用可觀測問題的重要技術,愈發(fā)成為分布式應用不可缺少的基礎設施,本文將詳細介紹分布式鏈路的核心概念、架構原理和相關開源標準協議,并分享我們在實現無侵入 Go 采集 Sdk 方面的一些實踐,需要的朋友可以參考下
    2022-06-06
  • 詳解Go中如何進行進行內存優(yōu)化和垃圾收集器管理

    詳解Go中如何進行進行內存優(yōu)化和垃圾收集器管理

    這篇文章主要為大家詳細介紹了Go中如何進行進行內存優(yōu)化和垃圾收集器管理,文中的示例代碼講解詳細,具有一定的學習價值,感興趣的小伙伴可以了解下
    2023-11-11
  • Go語言中使用反射的方法

    Go語言中使用反射的方法

    這篇文章主要介紹了Go語言中使用反射的方法,實例分析了Go語言實現反射的技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-02-02
  • go語言實現一個簡單的http客戶端抓取遠程url的方法

    go語言實現一個簡單的http客戶端抓取遠程url的方法

    這篇文章主要介紹了go語言實現一個簡單的http客戶端抓取遠程url的方法,實例分析了Go語言http操作技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-03-03
  • golang使用net/rpc庫實現rpc

    golang使用net/rpc庫實現rpc

    這篇文章主要為大家詳細介紹了golang如何使用net/rpc庫實現rpc,文章的示例代碼講解詳細,具有一定的借鑒價值,需要的小伙伴可以參考一下
    2024-01-01
  • Golang程序中使用Prometheus的client_golang庫

    Golang程序中使用Prometheus的client_golang庫

    這篇文章主要介紹了Golang程序中使用Prometheus的client_golang庫,Prometheus 是一個開源的監(jiān)控和警報工具包,用于收集和處理應用程序和系統的指標數據。Prometheus 提供了多種客戶端庫,可以輕松地集成到各種編程語言中
    2023-04-04
  • 利用Go語言實現輕量級OpenLdap弱密碼檢測工具

    利用Go語言實現輕量級OpenLdap弱密碼檢測工具

    這篇文章主要為大家詳細介紹了如何利用Go語言實現輕量級OpenLdap弱密碼檢測工具,文中的示例代碼講解詳細,感興趣的小伙伴可以嘗試一下
    2022-09-09
  • Go語言庫系列之dotsql詳解

    Go語言庫系列之dotsql詳解

    這篇文章主要介紹了Go語言庫系列之dotsql的相關知識,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-04-04

最新評論