2016-09-20 12 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 
} 

私のような何かをする必要がありクラスSqlConnectionStringBuilderが.NETにあります。

ありがとうございます!

+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"` 
} 
関連する問題