2016-09-20 86 views
0

我是golang的新手,我需要将连接字符串解析为结构以获取特定元素。例如:将连接字符串解析为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

谢谢!

+0

https://golang.org/pkg/encoding/csv – Sridhar

回答

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