我是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 :(得分: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"`
}