2016-09-20 85 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"` 
}