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

如何解引用指针结构体获取Google Maps Matrix的时长与距离信息

解引用Google Maps Distance Matrix响应中的指针结构体获取数据

从你的输出能看到,resp.Rows[0].Elements是一个指针切片([]*maps.DistanceMatrixElement),直接打印只会显示指针地址。要拿到具体字段值,需要先通过索引取出单个指针,再访问其指向的结构体字段(Go语言支持直接通过指针访问结构体字段,无需显式解引用语法)。

正确获取数据的代码示例

修改你尝试的代码,直接访问指针指向的字段:

// 获取第一个元素的指针
element := resp.Rows[0].Elements[0]

// 直接通过指针访问目标字段
duration := element.Duration
distanceHuman := element.Distance.HumanReadable

fmt.Println("Duration:", duration)
fmt.Println("Distance:", distanceHuman)

整合时长转换的完整代码

将数据获取和时长转换逻辑结合,完整的main函数代码如下:

func main() {
    api_key := "xxxxxxx"
    c, err := maps.NewClient(maps.WithAPIKey(api_key))
    if err != nil {
        log.Fatalf("fatal error: %s", err)
    }

    r := &maps.DistanceMatrixRequest{
        Origins:      []string{"Dammam"},
        Destinations: []string{"Riyadh"},
        ArrivalTime:  (time.Date(1, time.September, 1, 0, 0, 0, 0, time.UTC)).String(),
    }

    resp, err := c.DistanceMatrix(context.Background(), r)
    if err != nil {
        log.Fatalf("fatal error: %s", err)
    }

    // 校验响应数据有效性,避免索引越界
    if len(resp.Rows) == 0 || len(resp.Rows[0].Elements) == 0 {
        log.Fatal("no valid distance matrix data returned")
    }

    element := resp.Rows[0].Elements[0]
    if element.Status != "OK" {
        log.Fatalf("element status error: %s", element.Status)
    }

    // 将Duration转换为小时和分钟
    d2 := time.Duration(element.Duration)
    hr := int64(d2 / time.Hour)
    min := int64(d2 / time.Minute)
    m := min - hr*60

    fmt.Printf("Time required is: %d H and %d M\n", hr, m)
    fmt.Printf("Distance: %s\n", element.Distance.HumanReadable)
}

关键说明

  • Go语言提供语法糖,结构体指针p可以直接用p.Field访问字段,无需写(*p).Field。
  • 必须先检查切片长度和元素状态(Status == "OK"),避免因无效数据触发程序panic。

内容的提问来源于stack exchange,提问作者Hasan A Yousef

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 00:54:12