在Golang中将连接字符串解析为Struct

时间:2016-09-20 12:51:12

标签: parsing go connection-string

我是golang的新手,我需要将连接字符串解析为结构以获取其中的特定元素。例如:

我有这个:

"Data Source=mysqlserver.local,37001;Initial Catalog=mydatabase;User ID=usertest;Asynchronous Processing=True"

我需要将这些数据放在一个看起来或多或少像......的结构上。

type ConnectionString struct {
    DataSource             string
    InitialCatalog         string
    UserID                 string
    AsynchronousProcessing string
}

我需要像.NET上的类SqlConnectionStringBuilder那样做。

谢谢!

1 个答案:

答案 0 :(得分:0)

好吧,我做了以下事情来解决我的问题(我知道它不完美,但非常符合我的需求)

func ConnectionStringBuilder(connectionstring string) ConnectionString {

    splittedcs := strings.Split(connectionstring, ";")

    csstruct := ConnectionString{}

    for i := 0; i < len(splittedcs); i++ {

        actualitem := splittedcs[i]
        splitteditem := strings.Split(actualitem, "=")

        fieldname := strings.ToUpper(strings.Replace(splitteditem[0], " ", "", -1))
        value := splitteditem[1]

        if fieldname == "DATASOURCE" || fieldname == "SERVER" {
            splittedport := strings.Split(value, ",")

            val := reflect.ValueOf(&csstruct)
            (val.Elem()).FieldByName(fieldname).SetString(splittedport[0])

            if len(splittedport) > 1 {
                (val.Elem()).FieldByName("PORT").SetString(splittedport[1])
            }

        } else {

            val := reflect.ValueOf(&csstruct)
            (val.Elem()).FieldByName(fieldname).SetString(value)
        }

        if csstruct.DATASOURCE != "" {
            csstruct.HOST = csstruct.DATASOURCE
        }

        if csstruct.SERVER != "" {
            csstruct.HOST = csstruct.SERVER
        }
    }

    return csstruct, nil
}

type ConnectionString struct {
    HOST                   string `json:"Host,omitempty"`
    DATASOURCE             string `json:"DataSource,omitempty"`
    SERVER                 string `json:"Server,omitempty"`
    INITIALCATALOG         string `json:"InitialCatalog,omitempty"`
    USERID                 string `json:"UserID,omitempty"`
    ASYNCHRONOUSPROCESSING string `json:"AsynchronousProcessing,omitempty"`
    PASSWORD               string `json:"Password,omitempty"`
    DATABASE               string `json:"Database,omitempty"`
    PORT                   string `json:"Port,omitempty"`
}