grpc鏈嶅姟绔浆鎹rotobuf鍒癶ttp璇锋眰鍙傛暟query
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了grpc鏈嶅姟绔浆鎹rotobuf鍒癶ttp璇锋眰鍙傛暟query相关的知识,希望对你有一定的参考价值。
鏍囩锛?a href='http://www.mamicode.com/so/1/%e8%bd%ac%e6%8d%a2' title='杞崲'>杞崲
request grpc 鏈嶅姟 oat log split鍓嶆彁
grpc鏈嶅姟鎺ユ敹鍒皉equest鐨勮姹傚悗锛岄渶瑕佹妸鍙傛暟杞崲鎴恏ttp锛屽幓璇锋眰鍏朵粬鎺ュ彛銆?/p>
浣跨敤go浣滀负grpc鐨勬湇鍔$锛屾暟鎹崗璁槸protobuf
鎯冲埌鐨勫嚑绉嶈В鍐虫柟妗堬細
1.缂栬瘧濂界殑pb.go鏂囦欢閲屾湁涓猻tring()锛屽彲浠ユ妸鎵€鏈夊弬鏁伴兘鎵撳嵃鍑烘潵锛屽弬鏁颁箣闂存槸绌烘牸闅斿紑鐨勶紝鍙傛暟鍜屽€兼槸k:v鐨勫舰寮忥紝浣嗘槸涓嶅甫寮曞彿锛屼笉鏄痡son鏍煎紡
- 2.鎶婃帴鏀跺埌鐨勬暟鎹浆鎹负json锛岀洿鎺ヤ互json鐨勬牸寮忥紝鍙戦€佽姹?/li>
3.鏍规嵁浼犺繃鏉ョ殑request鍙嶅皠鍒板浐瀹氱殑struct涓婏紝寰楀埌鍏蜂綋鐨勫睘鎬у拰鑾峰彇姝ゅ睘鎬х殑鏂规硶锛屽啀鍔犲叆鍒皍rl.values{},鍐峞ncode()鍙戦€佽姹?/p>
瀹炵幇
鏂规1
鏂规1鏄瘮杈冪畝鍗曠殑锛岀敤绌烘牸鍒嗗壊锛屽緱鍒板弬鏁板拰鍊硷紝鍐嶆牴鎹?quot;:"鍒嗗壊寰楀埌鍙傛暟銆佸€硷紝鍐嶅姞鍏ュ埌url.values{}
浠g爜濡備笅锛?/p>
param := url.Values{}
//寰楀埌璇锋眰鐨勫瓧绗︿覆褰㈠紡
rs := strings.Split(request.String(), " ")
for _, v := range rs {
if v != "" {
vv := strings.Split(v, ":")
param.Add(vv[0], strings.Trim(vv[1], """))
vv := strings.SplitN(v, ":", 2)
//杞崲鎴? val, e := strconv.Unquote(vv[1])
log.Print(val, e)
if e == nil {
param.Add(vv[0], val)
}
}
}
鍓嶆湡杩愯OK锛屽悗鏈熼亣鍒颁簡涓や釜闂锛?/p>
- 1.鎻愪氦鐨勫€奸噷鏈夌┖鏍兼椂锛屽垎鍓蹭細鏈夐棶棰?/li>
- 2.寰楀埌鐨勪腑鏂囨槸utf8瀛楃
鏀惧純鏂规1
鏂规2
鎶婃暟鎹厛杞垚json锛屽啀瑙f瀽鎴恗ap[string]string 鐨勫舰寮忥紝鐩殑鏄负浜嗙渷鍘诲€奸兘杞崲涓簊tring
str, _ := json.Marshal(request)
jsonstr := string(str)
m := make(map[string]interface{})
e := json.Unmarshal([]byte(jsonstr), &m)
param := url.Values{}
if e != nil {
return param
}
for k, v := range m {
sv := fmt.Sprint(v)
param.Add(k, sv)
}
缁撴灉锛氬浜庝腑鏂囪繕鏈夌┖鏍肩殑闂鏄В鍐充簡锛屼笉杩囦細鎶奿nt64鐨勬暟瀛楃被鍨嬭浆鎹㈡垚float绫诲瀷锛岃浆鎹㈡湁闂
鏂规3
鏍规嵁go鐨剅eflect鍖呭弽灏勫嚭瀹為檯鐨剆truct锛実o缂栬瘧pb鐨勬枃浠堕噷struct閲屽睘鎬у悕鍜宲roto鏂囦欢涓嶄竴鏍凤紝闇€瑕佹牴鎹睘鎬х殑tag寰楀埌瀹為檯鐨勫弬鏁板悕
浠g爜濡備笅锛?/p>
ty := reflect.TypeOf(request).Elem()
#寰楀埌struct鐨勫睘鎬ф暟閲? fieldnum := ty.NumField()
#瀹為檯鏁版嵁鐨勬寚閽? ob := reflect.ValueOf(request)
param := url.Values{}
#鐢变簬缂栬瘧濂界殑灞炴€ф渶鍚?浣嶄笉鐢? for i := 0; i < fieldnum-3; i++ {
f := ty.Field(i).Tag.Get("json")
fv := strings.Split(f, ",")
k := fv[0]
fieldname := ty.Field(i).Name
ret := ob.MethodByName("Get" + fieldname).Call(nil)
if !ret[0].IsZero() {
# 杩欎竴姝ワ紝鐢ㄤ簡寰堝阀鐨勫姙娉曟妸鍚勪釜绫诲瀷杞崲鎴愪簡string鎵嶈兘鍔犲叆鍒皃aram閲? v := fmt.Sprint(ret[0])
param.Add(k, v)
}
}
return param
以上是关于grpc鏈嶅姟绔浆鎹rotobuf鍒癶ttp璇锋眰鍙傛暟query的主要内容,如果未能解决你的问题,请参考以下文章