亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

嵌套映射的泛型

嵌套映射的泛型

Go
暮色呼如 2022-11-23 15:51:51
目前我正在使用這樣的代碼:package hellotype object map[string]interface{}func (o object) get(key string) object {   val, _ := o[key].(object)   return val}func (o object) getInt(key string) int {   val, _ := o[key].(int)   return val}但問題是,我必須為我想要返回的每種類型編寫一個函數。我嘗試使用這樣的東西:package hellotype object map[string]interface{}// syntax error: method must have no type parametersfunc (o object) get[T object|int](key string) T {   val, _ := o[key].(T)   return val}然后我這樣做了:package hellotype object map[string]interface{}type token[T object|int] struct {   in object   out T}func (t token[T]) get(key string) token[T] {   t.out, _ = t.in[key].(T)   return t}可以編譯,但由于in永遠不會更新,所以我認為我無法為嵌套地圖進行鏈接:something.get("one").get("two").get("three")是否可以用泛型做一些事情,得到與我的原始代碼相似的結果,但沒有復制粘貼功能?
查看完整描述

1 回答

?
RISEBY

TA貢獻1856條經驗 獲得超5個贊

我想我明白了。您可以創建一個包裝器類型,它包含當前對象以及輸出值。如果有人有其他想法,我也對它們感興趣:


package main


type object map[string]interface{}


type token[T any] struct {

   object

   value T

}


func newToken[T any](m object) token[T] {

   return token[T]{object: m}

}


func (t token[T]) get(key string) token[T] {

   switch val := t.object[key].(type) {

   case object:

      t.object = val

   case T:

      t.value = val

   }

   return t

}

例子:


package main


func main() {

   obj := object{

      "one": object{

         "two": object{"three": 3},

      },

   }

   three := newToken[int](obj).get("one").get("two").get("three")

   println(three.value == 3)

}


查看完整回答
反對 回復 2022-11-23
  • 1 回答
  • 0 關注
  • 123 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號