如何解引用指针结构体获取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
相关产品推荐
相关产品推荐

