目前我正在使用這樣的代碼: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)
}
- 1 回答
- 0 關注
- 123 瀏覽
添加回答
舉報
0/150
提交
取消