国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

go利用反射獲取string字符串對應(yīng)的值

這篇具有很好參考價(jià)值的文章主要介紹了go利用反射獲取string字符串對應(yīng)的值。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

import (
   "encoding/json"
   "fmt"
   "github.com/tidwall/gjson"
   "reflect"
   "strconv"
   "strings"
)

type Param struct {
   SGameOpenId string
   GameId      int
   Role        struct {
      AreaId int
      PlatId int
      RoleId string
   }
}

func main() {
   requestStr := `{"fields":"{\"openid\":\"SGameOpenId\",\"role_id\":\"Role.RoleId\",\"gameid\":\"GameId\",\"area\":\"Role.AreaId\", \"platid\":\"Role.PlatId#1:10|0:20\"}"}`
   s := gjson.Get(requestStr, "fields").String()

   p := &Param{
      SGameOpenId: "3375000136",
      GameId:      1191,
      Role: struct {
         AreaId int
         PlatId int
         RoleId string
      }{AreaId: 2, PlatId: 1, RoleId: "this role id"},
   }

   getData(s, p)
}

type ProcessingWebParameters struct {
   dataMap map[string]interface{}
}

func getData(str string, req *Param) {
   var m map[string]interface{}
   json.Unmarshal([]byte(str), &m)
   dataMap := make(map[string]interface{}, 0)
   v := reflect.ValueOf(req)
   for s, i := range m {
      if sl := strings.Split(i.(string), "#"); len(sl) > 1 {
         // Role.PlatId#1:10|0:20
         vv, k := actionStruct(sl[0], &v)
         vl := strings.Split(sl[1], "|")
         compareMap := make(map[string]string)
         for _, s2 := range vl {
            ev := strings.Split(s2, ":")
            compareMap[ev[0]] = ev[1]
         }
         // 判斷目標(biāo)類別
         if k == reflect.Int {
            t := strconv.Itoa(vv.(int))
            if value, ok := compareMap[t]; ok {
               dataMap[s], _ = strconv.Atoi(value)
            }
         } else if k == reflect.String {
            if value, ok := compareMap[vv.(string)]; ok {
               dataMap[s], _ = strconv.Atoi(value)
            }
         }

      } else {
         t, _ := actionStruct(i.(string), &v)
         dataMap[s] = t
      }
   }
   fmt.Println(dataMap)
}

func actionStruct(i string, v *reflect.Value) (interface{}, reflect.Kind) {
   var k reflect.Value
   if ss := strings.Split(i, "."); len(ss) > 1 {
      k = v.Elem().FieldByName(ss[0]).FieldByName(ss[1])
   } else {
      k = v.Elem().FieldByName(i)
   }
   return getValue(&k), k.Kind()
}

func getValue(value *reflect.Value) interface{} {
   switch value.Kind() {
   case reflect.Int:
      return int(value.Int())
   case reflect.String:
      return value.String()
   default:

   }
   return ""
}

文章來源地址http://www.zghlxwxcb.cn/news/detail-445163.html

到了這里,關(guān)于go利用反射獲取string字符串對應(yīng)的值的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • String(字符串)

    String(字符串)

    java.lang.String類代表字符串,Java程序中的所有字符串文字(例如“abc”)都為此類的對象。 字符串的內(nèi)容是不會(huì)發(fā)生改變的,它的對象在創(chuàng)建后不能被更改。 String是Java定義好的一個(gè)類。定義在java.lang包中,所以使用的時(shí)候不需要導(dǎo)包。 Java程序中的所有字符串文字都被實(shí)為此

    2024年02月13日
    瀏覽(32)
  • String字符串

    String字符串

    直接創(chuàng)建 代碼簡單,節(jié)約內(nèi)存 使用new創(chuàng)建 有new就會(huì)開辟一個(gè)新的小空間,地址值不同不會(huì)復(fù)用浪費(fèi)空間 案例:用戶登錄 遍歷字符串 統(tǒng)計(jì)字符個(gè)數(shù) 拼接字符串 字符串反轉(zhuǎn) 金額轉(zhuǎn)換 手機(jī)號屏蔽 敏感詞替換 使用場景:1.字符串拼接。2、字符串反轉(zhuǎn) 常用方法練習(xí) 對稱字符串

    2024年02月16日
    瀏覽(22)
  • 【string題解 C++】字符串相乘 | 翻轉(zhuǎn)字符串III:翻轉(zhuǎn)單詞

    【string題解 C++】字符串相乘 | 翻轉(zhuǎn)字符串III:翻轉(zhuǎn)單詞

    目錄 字符串相乘 題面 錯(cuò)誤記錄 Way1 拆分成“先乘后加” 思路 實(shí)現(xiàn) 時(shí)空復(fù)雜度分析 反思 Way2 用數(shù)組 思路 實(shí)現(xiàn) 時(shí)空復(fù)雜度分析 翻轉(zhuǎn)字符串III:翻轉(zhuǎn)字符串中的單詞 題面 錯(cuò)誤記錄 思路1 遍歷找單詞 實(shí)現(xiàn) 思路2 暴力解法 實(shí)現(xiàn) 力扣(LeetCode)官網(wǎng) - 全球極客摯愛的技術(shù)成長平

    2024年02月07日
    瀏覽(25)
  • C# 字符串(String)

    C#基礎(chǔ)學(xué)習(xí)入門系列- C# 字符串(String) C#字符串(String)是一種不可變的序列字符。任何對字符串的操作都會(huì)返回一個(gè)新的字符串。字符串在C#中是一個(gè)引用類型,使用System.String類表示。 字符串可以通過使用雙引號或者@符號來創(chuàng)建。雙引號用于創(chuàng)建普通字符串 ,例如: @符

    2024年01月21日
    瀏覽(64)
  • redis—String字符串

    redis—String字符串

    目錄 前言 1.字符串?dāng)?shù)據(jù)類型 2.常見命令 3.典型應(yīng)用場景 字符串類型是Redis最基礎(chǔ)的數(shù)據(jù)類型,關(guān)于字符串需要特別注意: 1)首先Redis中所有的鍵的類型都是字符串類型,而且其他幾種數(shù)據(jù)結(jié)構(gòu)也都是在字符串類似基礎(chǔ).上構(gòu)建的,例如列表和集合的 元素類型是字符串類型,所以

    2024年02月02日
    瀏覽(18)
  • 字符串分割(split),將字符串按照指定字符進(jìn)行分割。split(String regex)和split(String regex, int limit)

    字符串分割(split),將字符串按照指定字符進(jìn)行分割。split(String regex)和split(String regex, int limit)

    一、 split(String regex) 字符串分割,將字符串按照指定字符進(jìn)行分割,返回的是一個(gè)字符串?dāng)?shù)組。 原理:參數(shù)名稱是 regex 表示的是以某個(gè)字符串進(jìn)行字符分割。 實(shí)例1:根據(jù)空格切割 輸出結(jié)果: 實(shí)例2:根據(jù)特殊字符進(jìn)行“.”分割 輸出結(jié)果: 二、 split(String regex, int limit) 字符

    2024年02月11日
    瀏覽(45)
  • Java Base64字符串與String字符串互轉(zhuǎn)方法

    Java Base64字符串與String字符串互轉(zhuǎn)方法

    在使用String轉(zhuǎn)Base64和Base64轉(zhuǎn)String上有點(diǎn)小問題,特此記錄。 結(jié)果: 也是跟上面差不多的思路,將Base64轉(zhuǎn)為byte數(shù)組,再轉(zhuǎn)為String

    2024年02月15日
    瀏覽(32)
  • 6.string字符串的比較

    6.string字符串的比較

    比較結(jié)果是真或假, 比較:字符串是1和1比較 然后9和2 比較 大后面就不用比了 對應(yīng)字符比他大就行了。 結(jié)果:如果這個(gè)是符合比較運(yùn)算符的就返回真。反之假 跟具不同的目的選擇不同的運(yùn)算符, 結(jié)果只有真和假,運(yùn)算符不是最后的結(jié)果。 總結(jié):如果這個(gè)是符合比較運(yùn)算符

    2024年02月15日
    瀏覽(22)
  • rust 字符串(String)詳解

    rust 字符串(String)詳解

    rust中的 String ,是一個(gè)非常常用的 crate ,它的底層涉及到了rust中的所有權(quán)概念,不過這不是本章的內(nèi)容,如果對rust所有權(quán)概念感興趣的,可以查看另一篇文章:rust所有權(quán) 本文的目的還是介紹 String 的基本用法,以及有哪些常用的函數(shù)可以使用 字符串,也就是由一系列字符

    2024年02月03日
    瀏覽(38)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包