func uberAPI(carRes *structure.CarResponse, tripData structure.DataStorage, startLat float64, startLng float64, endLat float64, endLng float64) { minPrice := 0 // Server token should be kept safe from others serverToken := "PLEASE PUT YOUR OWN SERVER TOKEN HERE" urlLeft := "https://api.uber.com/v1/estimates/price?" urlRight := "start_latitude=" + strconv.FormatFloat(startLat, 'f', -1, 64) + "&start_longitude=" + strconv.FormatFloat(startLng, 'f', -1, 64) + "&end_latitude=" + strconv.FormatFloat(endLat, 'f', -1, 64) + "&end_longitude=" + strconv.FormatFloat(endLng, 'f', -1, 64) + "&server_token=" + serverToken urlFormat := urlLeft + urlRight var userrequest structure.UserRequest getPrices, err := http.Get(urlFormat) if err != nil { fmt.Println("Get Prices Error", err) panic(err) } var data structure.UberAPIResponse index := 0 json.NewDecoder(getPrices.Body).Decode(&data) minPrice = data.Prices[0].LowEstimate for i := 0; i < len(data.Prices); i++ { if minPrice > data.Prices[i].LowEstimate { minPrice = data.Prices[i].LowEstimate index = i } userrequest.Product_id = data.Prices[index].ProductID } urlPath := "https://sandbox-api.uber.com/v1/requests" userrequest.Start_latitude = startLat userrequest.Start_longitude = startLng userrequest.End_latitude = endLat userrequest.End_longitude = endLng // accessToken cannot be told to others, therefore I leave this line empty accessToken := "PLEASE PUT YOUR OWN ACCESSTOKEN HERE" requestbody, _ := json.Marshal(userrequest) client := &http.Client{} req, err := http.NewRequest("POST", urlPath, bytes.NewBuffer(requestbody)) if err != nil { fmt.Println(err) return } req.Header.Add("Content-Type", "application/json") req.Header.Add("Authorization", "Bearer "+accessToken) res, err := client.Do(req) if err != nil { fmt.Println("QueryInfo: http.Get", err) return } defer res.Body.Close() body, err := ioutil.ReadAll(res.Body) uberRes := structure.UberResponse{} json.Unmarshal(body, &uberRes) fmt.Println(uberRes) carRes.Uber_wait_time_eta = uberRes.Eta }