gpt4 book ai didi

interface - golang如何访问接口(interface)字段

转载 作者:IT老高 更新时间:2023-10-28 13:04:21 27 4
gpt4 key购买 nike

我有一个函数如下,它解码一些 json 数据并将其作为接口(interface)返回

package search

func SearchItemsByUser(r *http.Request) interface{} {

type results struct {
Hits hits
NbHits int
NbPages int
HitsPerPage int
ProcessingTimeMS int
Query string
Params string
}

var Result results

er := json.Unmarshal(body, &Result)
if er != nil {
fmt.Println("error:", er)
}
return Result

}

我正在尝试访问数据字段(例如 Params),但由于某些原因,它说接口(interface)没有这样的字段。知道为什么吗?

func test(w http.ResponseWriter, r *http.Request) {

result := search.SearchItemsByUser(r)
fmt.Fprintf(w, "%s", result.Params)

最佳答案

接口(interface)变量可用于存储符合接口(interface)的任何值,并调用属于该接口(interface)的方法。请注意,您将无法通过接口(interface)变量访问基础值上的字段。

在这种情况下,您的 SearchItemsByUser 方法返回一个 interface{} 值(即空接口(interface)),它可以保存任何值但不提供任何直接访问到那个值。您可以通过类型断言提取接口(interface)变量持有的动态值,如下所示:

dynamic_value := interface_variable.(typename)

除了在这种情况下,动态值的类型对于您的 SearchItemsByUser 方法是私有(private)的。我建议对您的代码进行两项更改:

  1. 在顶层定义您的 results 类型,而不是在方法体中。

  2. 使 SearchItemsByUser 直接返回 results 类型的值,而不是 interface{}

关于interface - golang如何访问接口(interface)字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21796151/

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