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的主要内容,如果未能解决你的问题,请参考以下文章

F5鍋ュ悍妫€鏌ュ鑷寸殑鏈嶅姟绔繛鎺ュ紓甯窻ST

鏈€鎶€鏈?| API缃戝叧鏈嶅姟鐔旀柇闄嶇骇瀹炶返

銆婂甫鐫€闂鐪嬫簮鐮併€婦ubbo鏈嶅姟娉ㄥ唽

NTP鏈嶅姟鍜孌NS鏈嶅姟

闃块噷寰湇鍔℃媶鍒?鏈嶅姟娌荤悊鍘熷垯