douhong1703 2016-09-20 12:51
浏览 457

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

I'm new at golang and I need to parse a connection string into a struct to get specific elements of that. Example:

I have this:

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

And I need to put that data on a struct that looks more or less like...

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

I need to do something like the class SqlConnectionStringBuilder on .NET does.

Thanks!!

  • 写回答

1条回答 默认 最新

  • dsdzvprlp51692469 2016-09-20 15:48
    关注

    Well, I did the following to solve my problem (I know its not perfect, but fits my needs very well)

    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"`
    }
    
    评论

报告相同问题?

悬赏问题

  • ¥15 教务系统账号被盗号如何追溯设备
  • ¥20 delta降尺度方法,未来数据怎么降尺度
  • ¥15 c# 使用NPOI快速将datatable数据导入excel中指定sheet,要求快速高效
  • ¥15 再不同版本的系统上,TCP传输速度不一致
  • ¥15 高德地图点聚合中Marker的位置无法实时更新
  • ¥15 DIFY API Endpoint 问题。
  • ¥20 sub地址DHCP问题
  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式