package biz import ( "encoding/json" "errors" "fmt" "github.com/go-kratos/kratos/v2/log" "io" "net/http" ) type MapServiceBiz struct { log *log.Helper } func NewMapServiceBiz(logger log.Logger) *MapServiceBiz { return &MapServiceBiz{log: log.NewHelper(logger)} } // 获取驾驶信息 func (msbiz *MapServiceBiz) GetDriverInfo(origin, destination string) (string, string, error) { // 一,请求获取 key := "54be816ba4fae6572a1701f2c578ec71" api := "https://restapi.amap.com/v3/direction/driving" parameters := fmt.Sprintf("origin=%s&destination=%s&extensions=base&output=json&key=%s", origin, destination, key) url := api + "?" + parameters resp, err := http.Get(url) if err != nil { return "", "", err } defer func() { _ = resp.Body.Close() }() body, err := io.ReadAll(resp.Body) // resp.Body是io.Reader类型 需要io.ReadAll读出来变成byte[]类型 if err != nil { return "", "", err } // 二,解析出来,json ddResp := DirectionDrivingResp{} if err := json.Unmarshal(body, &ddResp); err != nil { return "", "", err } // 三,判定LSB请求结果 if ddResp.Status == "0" { return "", "", errors.New(ddResp.Info) } // 四,正确返回,默认使用第一条路线 path := ddResp.Route.Paths[0] return path.Distance, path.Duration, nil } type DirectionDrivingResp struct { Status string `json:"status,omitempty"` Info string `json:"info,omitempty"` Infocode string `json:"infocode,omitempty"` Count string `json:"count,omitempty"` Route struct { Origin string `json:"origin,omitempty"` Destination string `json:"destination,omitempty"` Paths []Path `json:"paths,omitempty"` } `json:"route"` } type Path struct { Distance string `json:"distance,omitempty"` Duration string `json:"duration,omitempty"` Strategy string `json:"strategy,omitempty"` }