zoukankan      html  css  js  c++  java
  • 「笔记」「GO语言」XML文件的读写操作

    package main
    
    import (
        "database/sql"
        "encoding/xml"
        "fmt"
        _ "github.com/go-sql-driver/mysql"
        "io/ioutil"
        "os"
    )
    
    type Conf struct {
        XMLName     xml.Name       `xml:"Configuration"`
        Version     string         `xml:"Version,attr"`
        Database    DatabaseConfig `xml:"Database"`
        Description string         `xml:",innerxml"`
    }
    
    type DatabaseConfig struct {
        XMLName   xml.Name `xml:"Database"`
        DBtype    string   `xml:"DBtype"`
        DBhost    string   `xml:"DBhost"`
        DBport    string   `xml:"DBport"`
        DBname    string   `xml:"DBname"`
        Protocol  string   `xml:"Protocol"`
        DBuser    string   `xml:"DBuser"`
        DBpwd     string   `xml:"DBpwd"`
        DBcharset string   `xml:"DBcharset"`
        Testsql   string   `xml:"Testsql"`
    }
    
    func checkDBerr(err error) {
        if err != nil {
            fmt.Println("DBerror:", err)
        }
    }
    
    func checkIOerr(err error) {
        if err != nil {
            fmt.Println("IOerror:", err)
        }
    }
    
    func main() {
        //判断配置文件是否存在,如果不存在则提示用户输入配置并创建文件,如果存在则直接读取
        configFile, err := os.Open("src/conf.xml")
        defer configFile.Close()
        if err != nil {
            if false == os.IsExist(err) {
                config := Conf{}
                fmt.Println("Config file not exists,please input the config:")
                fmt.Println("Input the database type:")
                fmt.Scanf("%s", &config.Database.DBtype)
    
                if "mysql" == config.Database.DBtype {
                    fmt.Println("The database type is:", config.Database.DBtype)
                    fmt.Println("Input the database host:")
                    fmt.Scanf("%s", &config.Database.DBhost)
                    fmt.Println("Input the database port:")
                    fmt.Scanf("%s", &config.Database.DBport)
                    fmt.Println("Input the database name:")
                    fmt.Scanf("%s", &config.Database.DBname)
                    fmt.Println("Input the network protocol:")
                    fmt.Scanf("%s", &config.Database.Protocol)
                    fmt.Println("Input the database user:")
                    fmt.Scanf("%s", &config.Database.DBuser)
                    fmt.Println("Input the database password:")
                    fmt.Scanf("%s", &config.Database.DBpwd)
                    fmt.Println("Input the database character set:")
                    fmt.Scanf("%s", &config.Database.DBcharset)
                    config.Database.Testsql = "select welcomeinfo from welcomeinfo"
                    config.Version="0.0.0"
    
                    dbConnStr := config.Database.DBuser + ":" +
                        config.Database.DBpwd + "@" +
                        config.Database.Protocol + "(" +
                        config.Database.DBhost + ":" +
                        config.Database.DBport + ")/" +
                        config.Database.DBname + "?charset=" +
                        config.Database.DBcharset
    
                    fmt.Println("Database type is:", config.Database.DBtype)
                    fmt.Println("Database connection string is:", dbConnStr)
                    fmt.Println("Datebase test SQL:", config.Database.Testsql)
                    fmt.Println("Testing the connection of database...")
                    db, err := sql.Open("mysql", dbConnStr)
                    defer db.Close()
                    checkDBerr(err)
                    rows, err := db.Query(config.Database.Testsql)
                    checkDBerr(err)
                    if rows.Next() {
                        var welcomeinfo string
                        rows.Scan(&welcomeinfo)
                        fmt.Println("Connect to database succeeded:", welcomeinfo)
                        fmt.Println("Generating config file...")
                        outXML,err:=xml.MarshalIndent(config," ","  ")
                        checkIOerr(err)
                        //os.Stdout.Write(outXML)
                        configFile,err:=os.Create("src/conf.xml")
                        defer configFile.Close()
                        checkIOerr(err)
                        configFile.Write(outXML)
                        fmt.Println("Config file generated!")
                    } else {
                        fmt.Println("TestSQL failed!")
                    }
                } else {
                    fmt.Println("Sorry,database type not supported:", config.Database.DBtype)
                }
            } else {
                checkIOerr(err)
            }
        } else {
            //如果配置文件存在则直接读取配置并连接到数据库
            fmt.Println("Loading config file...")
            data, err := ioutil.ReadAll(configFile)
            checkIOerr(err)
            config := Conf{}
            err = xml.Unmarshal(data, &config)
            checkIOerr(err)
    
            if "mysql" == config.Database.DBtype {
                dbConnStr := config.Database.DBuser + ":" +
                    config.Database.DBpwd + "@" +
                    config.Database.Protocol + "(" +
                    config.Database.DBhost + ":" +
                    config.Database.DBport + ")/" +
                    config.Database.DBname + "?charset=" +
                    config.Database.DBcharset
                fmt.Println("Database type is:", config.Database.DBtype)
                fmt.Println("Database connection string is:", dbConnStr)
                fmt.Println("Datebase test SQL:", config.Database.Testsql)
                fmt.Println("Testing the connection of database...")
                db, err := sql.Open("mysql", dbConnStr)
                defer db.Close()
                checkDBerr(err)
                rows, err := db.Query(config.Database.Testsql)
                checkDBerr(err)
                if rows.Next() {
                    var welcomeinfo string
                    rows.Scan(&welcomeinfo)
                    fmt.Println("Connect to database succeeded:", welcomeinfo)
                } else {
                    fmt.Println("TestSQL failed!")
                }
    
            } else {
                fmt.Println("Sorry,database type not supported:", config.Database.DBtype)
            }
            fmt.Println("Finish loading config file.")
        }
    }
  • 相关阅读:
    ubuntu常用命令
    安装 Ruby, Rails 运行环境 常见的错误
    dubbo user guider笔记之一Preface
    翻译-Your first Dubbo application
    翻译-1.2 容器概述
    翻译-Core Technologies
    翻译-1.1 关于spring ioc容器和bean的介绍
    TCP协议-滑动窗口及拥塞控制
    QUARTZ之三-JobStores相关概念
    项目经验总结
  • 原文地址:https://www.cnblogs.com/AzikPhil/p/go_xml_rw.html
Copyright © 2011-2022 走看看