gpt4 book ai didi

go - 如何将接口(interface)转换为自定义类型

转载 作者:数据小太阳 更新时间:2023-10-29 03:14:51 25 4
gpt4 key购买 nike

我正在尝试从 json 字符串中解析出特定字段,目前我有以下代码片段。

package main

import (
"encoding/json"
"fmt"
)

type PlatformID string

type Map map[string]interface{}

func Str2Map(str string) (Map, error) {
var dictionary Map
bytes := []byte(str)
err := json.Unmarshal(bytes, &dictionary)
if err != nil {
fmt.Println(err)
}
return dictionary, err
}

func parsePlatformID(str string) (PlatformID, error) {
fmt.Println(str)
dict, err := Str2Map(str)
fmt.Println(dict)
return dict["platform-id"].(PlatformID), err
}

func main() {
PlatformDictStr := "{\"platform-id\":\"platform_BnjliXLEUV26\",\"platform-labels\":\"test\",\"OptimizeScheme\":\"None\"}"

fmt.Println(PlatformDictStr)

ID, _ := parsePlatformID(PlatformDictStr)
fmt.Println(ID)
}

当我尝试运行它时,它给了我以下错误

{"platform-id":"platform_BnjliXLEUV26","platform-labels":"test","OptimizeScheme":"None"}
{"platform-id":"platform_BnjliXLEUV26","platform-labels":"test","OptimizeScheme":"None"}
map[platform-id:platform_BnjliXLEUV26 platform-labels:test OptimizeScheme:None]
panic: interface conversion: interface is string, not main.PlatformID

goroutine 1 [running]:
panic(0x126aa0, 0x10532300)
/usr/local/go/src/runtime/panic.go:500 +0x720
main.parsePlatformID(0x13e6fe, 0x58, 0x0, 0x0, 0x0, 0x0)
/tmp/sandbox256874711/main.go:26 +0x220
main.main()
/tmp/sandbox256874711/main.go:34 +0x100

question我得到 panic: interface conversion: interface is string

的答案

如果我尝试将类型断言更改为 PlatformID 的基础类型 string,它甚至不会编译 tmp/sandbox325023244/main.go:26: cannot use dict[ "platform-id"].(string)(字符串类型)作为返回参数中的 PlatformID 类型

那么我应该如何修改 return 行以便我可以检索 PlatformID?

最佳答案

在查看了 PlatformDictStr 之后,我认为 var dictionary map[string]string 应该可以胜任。PlatformID(dict["platform-id"].(string)) 在这种情况下可以避免。这里的工作示例 https://play.golang.org/p/A5kiVm_XbP

关于go - 如何将接口(interface)转换为自定义类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39302313/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com