can golang function return interface{}{} - how to return a map list
can golang function return interface{}{} - how to return a map list
func getLatestTxs() map[string]interface{}{} {
fmt.Println("hello")
resp, err := http.Get("http://api.etherscan.io/api?module=account&action=txlist&address=0x266ac31358d773af8278f625c4d4a35648953341&startblock=0&endblock=99999999&sort=asc&apikey=5UUVIZV5581ENPXKYWAUDGQTHI956A56MU")
defer resp.Body.Close()
body, _ := ioutil.ReadAll(resp.Body)
if err != nil {
fmt.Errorf("etherscan访问失败")
}
ret := map[string]interface{}{}
json.Unmarshal(body, &ret)
if ret["status"] == 1 {
return ret["result"]
}
}
我想要 return map[string]interface{}{}
在我的代码中。
但是我遇到了编译错误syntax error: unexpected [ after top level declaration
如果我把map[string]interface{}{}
改成interface{}
,就没有编译错误了。
注意 我使用 map[string]interface{}{}
因为我想要 return 地图列表。
创建 return 类型到 map[string]interface{}
。因为来自 GET
请求的响应 return 是 map[string]interface{}
类型而不是 map[string]interface{}{}
类型,后者是复合文字。所以你可以像
一样使用它
func getLatestTxs() map[string]interface{} {
fmt.Println("hello")
// function body code ....
return ret
}
对于这一行
if i change map[string]interface{}{} to interface{}, there is no
compile error any more.
我们可以将任何东西转换为 interface{}
,因为它作为一个包装器工作,可以包装任何类型并将保存基础类型及其值。可以使用基础类型的类型断言来接收该值。因此,在您使用接口的情况下,它将包装 map[string]interface{}
值。要获取值,需要按如下方式键入断言。
func getLatestTxs() interface{} {
fmt.Println("hello")
// function code .....
//fmt.Println(ret["result"])
return ret
}
ret["result"].(interface{}).([]interface{})
打印底层map[string]interface{}
得到result
里面单个对象的值
fmt.Println(ret["result"].(interface{}).([]interface{})[0].(map[string]interface{})["from"])
代码map[string]interface{}{}
是空地图的复合文字值。函数是用类型声明的,而不是值。您似乎想要 return 切片类型 []map[string]interface{}
。使用以下函数:
func getLatestTxs() []map[string]interface{} {
fmt.Println("hello")
resp, err := http.Get("http://api.etherscan.io/api?module=account&action=txlist&address=0x266ac31358d773af8278f625c4d4a35648953341&startblock=0&endblock=99999999&sort=asc&apikey=5UUVIZV5581ENPXKYWAUDGQTHI956A56MU")
defer resp.Body.Close()
body, _ := ioutil.ReadAll(resp.Body)
if err != nil {
fmt.Errorf("etherscan访问失败")
}
var ret struct {
Status string
Result []map[string]interface{}
}
json.Unmarshal(body, &ret)
if ret.Status == "1" {
return ret.Result
}
return nil
}
func getLatestTxs() map[string]interface{}{} {
fmt.Println("hello")
resp, err := http.Get("http://api.etherscan.io/api?module=account&action=txlist&address=0x266ac31358d773af8278f625c4d4a35648953341&startblock=0&endblock=99999999&sort=asc&apikey=5UUVIZV5581ENPXKYWAUDGQTHI956A56MU")
defer resp.Body.Close()
body, _ := ioutil.ReadAll(resp.Body)
if err != nil {
fmt.Errorf("etherscan访问失败")
}
ret := map[string]interface{}{}
json.Unmarshal(body, &ret)
if ret["status"] == 1 {
return ret["result"]
}
}
我想要 return map[string]interface{}{}
在我的代码中。
但是我遇到了编译错误syntax error: unexpected [ after top level declaration
如果我把map[string]interface{}{}
改成interface{}
,就没有编译错误了。
注意 我使用 map[string]interface{}{}
因为我想要 return 地图列表。
创建 return 类型到 map[string]interface{}
。因为来自 GET
请求的响应 return 是 map[string]interface{}
类型而不是 map[string]interface{}{}
类型,后者是复合文字。所以你可以像
func getLatestTxs() map[string]interface{} {
fmt.Println("hello")
// function body code ....
return ret
}
对于这一行
if i change map[string]interface{}{} to interface{}, there is no compile error any more.
我们可以将任何东西转换为 interface{}
,因为它作为一个包装器工作,可以包装任何类型并将保存基础类型及其值。可以使用基础类型的类型断言来接收该值。因此,在您使用接口的情况下,它将包装 map[string]interface{}
值。要获取值,需要按如下方式键入断言。
func getLatestTxs() interface{} {
fmt.Println("hello")
// function code .....
//fmt.Println(ret["result"])
return ret
}
ret["result"].(interface{}).([]interface{})
打印底层map[string]interface{}
得到result
fmt.Println(ret["result"].(interface{}).([]interface{})[0].(map[string]interface{})["from"])
代码map[string]interface{}{}
是空地图的复合文字值。函数是用类型声明的,而不是值。您似乎想要 return 切片类型 []map[string]interface{}
。使用以下函数:
func getLatestTxs() []map[string]interface{} {
fmt.Println("hello")
resp, err := http.Get("http://api.etherscan.io/api?module=account&action=txlist&address=0x266ac31358d773af8278f625c4d4a35648953341&startblock=0&endblock=99999999&sort=asc&apikey=5UUVIZV5581ENPXKYWAUDGQTHI956A56MU")
defer resp.Body.Close()
body, _ := ioutil.ReadAll(resp.Body)
if err != nil {
fmt.Errorf("etherscan访问失败")
}
var ret struct {
Status string
Result []map[string]interface{}
}
json.Unmarshal(body, &ret)
if ret.Status == "1" {
return ret.Result
}
return nil
}