You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Go语言函数能否返回interface{}?如何返回map列表?

Go函数返回interface{}与Map列表的实现方案

1. 函数当然可以返回interface{}类型!

Go里的interface{}是空接口,它不要求实现任何方法,因此所有Go类型都天然实现了这个接口——这意味着你可以用它承载任意值,自然也能作为函数的返回类型。不仅单个interface{}可以返回,像你示例里的map[string]interface{}这种嵌套空接口的复合类型(用来解析结构未知的JSON特别方便),也是完全合法的返回值。

2. 如何返回Map列表?

你说的「Map列表」本质是切片包裹的map,也就是[]map[string]interface{}类型。结合你调用Etherscan API的场景,API返回的JSON中result字段正是交易列表,我们可以把这部分提取出来作为返回值。

不过你的示例代码有几个细节需要修正(比如错误处理、status判断的类型问题),下面是完善后的完整代码:

package main

import (
	"encoding/json"
	"fmt"
	"io/ioutil"
	"net/http"
)

// 返回交易列表([]map[string]interface{}类型)
func getLatestTxs() ([]map[string]interface{}, error) {
	resp, err := http.Get("http://api.etherscan.io/api?module=account&action=txlist&address=0x266ac31358d773af8278f625c4d4a35648953341&startblock=0&endblock=99999999&sort=asc&apikey=5UUVIZV5581ENPXKYWAUDGQTHI956A56MU")
	if err != nil {
		return nil, fmt.Errorf("etherscan访问失败: %v", err)
	}
	defer resp.Body.Close() // 先判断err确保resp不为nil,避免panic

	body, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		return nil, fmt.Errorf("读取响应体失败: %v", err)
	}

	ret := map[string]interface{}{}
	if err := json.Unmarshal(body, &ret); err != nil {
		return nil, fmt.Errorf("解析JSON失败: %v", err)
	}

	// 注意:Etherscan返回的status是字符串类型,不是数字!
	if status, ok := ret["status"].(string); ok && status == "1" {
		// 将result转换为[]map[string]interface{}类型
		txList, ok := ret["result"].([]map[string]interface{})
		if !ok {
			return nil, fmt.Errorf("交易列表格式不符合预期")
		}
		return txList, nil
	}

	return nil, fmt.Errorf("API返回错误: %v", ret["message"])
}

func main() {
	txs, err := getLatestTxs()
	if err != nil {
		fmt.Printf("获取交易失败: %v\n", err)
		return
	}
	fmt.Printf("共获取到%d条交易\n", len(txs))
	// 打印第一条交易示例
	if len(txs) > 0 {
		fmt.Printf("第一条交易详情: %+v\n", txs[0])
	}
}

额外建议

如果你的业务场景固定,更推荐定义自定义结构体来解析JSON(比如type Transaction struct { Hash string; BlockNumber string; ... }),然后返回[]Transaction。这样类型更安全,代码可读性更高,还能避免大量类型断言的麻烦。

内容的提问来源于stack exchange,提问作者眭文峰

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 07:05:08