APIs are a fundamental part of the web. Today, there are countless APIs waiting to be consumed in meaningful applications.
The Go programming language is an open-source project supported by Google. Focused on fast execution and ease of learning, Go has gained popularity, especially in areas like cloud engineering.
APIs are the backbone of any application, so let's see how we can call APIs in a Go application. I have divided the process into five steps which are as follows:
First of all, let's find an API to use in our Go application. RapidAPI Hub enables you to choose from thousands of public APIs for use in your projects.
For this guide, we will use the CarbonFootprint API from RapidAPI Hub that gives us the carbon footprint data of travel.
To use this API, you need to subscribe to it first. You can do this by clicking on the Subscribe to Test button.
Now, let's get our hands dirty and start writing the code to consume the API. Go ahead and create a Go file named main.go
. The first thing we will do in this file is import the required packages. We will add the following:
go
package mainimport("net/http""fmt""io/ioutil")
The net/http
package deals with HTTP servers/clients and provides functionalities required to make HTTP requests. fmt
and io/ioutil
implement some necessary I/O functions.
We will use the NewRequest
function of the http
package to specify our API call because it allows us to set custom headers. The function takes three parameters.
Let's add this function.
go
package mainimport("net/http""fmt""io/ioutil")func main() {url := "https://carbonfootprint1.p.rapidapi.com/CarbonFootprintFromCarTravel?distance=100&vehicle=SmallDieselCar"req, err := http.NewRequest("GET", url, nil)if err != nil {fmt.Print(err.Error())}}
We also added an if
statement to catch any possible errors and log them. To add headers in our API request, we can use the Header.Add
function. Let's add our API key using it.
go
package mainimport("net/http""fmt""io/ioutil")func main() {url := "https://carbonfootprint1.p.rapidapi.com/CarbonFootprintFromCarTravel?distance=100&vehicle=SmallDieselCar"req, err := http.NewRequest("GET", url, nil)if err != nil {fmt.Print(err.Error())}req.Header.Add("x-rapidapi-key", "YOU_API_KEY")}
Now we can send the request to receive the response from the API.
go
package mainimport("net/http""fmt""io/ioutil")func main() {url := "https://carbonfootprint1.p.rapidapi.com/CarbonFootprintFromCarTravel?distance=100&vehicle=SmallDieselCar"req, err := http.NewRequest("GET", url, nil)if err != nil {fmt.Print(err.Error())}req.Header.Add("x-rapidapi-key", "YOU_API_KEY")res, err := http.DefaultClient.Do(req)if err != nil {fmt.Print(err.Error())}}
Finally, we can display the data returned by the API. Firstly, the client must close the response body when finished with it:
go
defer res.Body.Close()
Now, we can access the response body using the ioutil.ReadAll
function. After checking for errors, we can display the response as a string.
go
package mainimport("net/http""fmt""io/ioutil")func main() {url := "https://carbonfootprint1.p.rapidapi.com/CarbonFootprintFromCarTravel?distance=100&vehicle=SmallDieselCar"req, err := http.NewRequest("GET", url, nil)if err != nil {fmt.Print(err.Error())}req.Header.Add("x-rapidapi-key", "YOU_API_KEY")res, err := http.DefaultClient.Do(req)if err != nil {fmt.Print(err.Error())}defer res.Body.Close()body, readErr := ioutil.ReadAll(res.Body)if readErr != nil {fmt.Print(err.Error())}fmt.Println(string(body))}
Run the file through your terminal, and you will see the API response like this:
json
{"carbonEquivalent": 17.137}
Now your application is ready to make API calls.
This guide was an introduction to consuming APIs in Go. We hope that now you can start using APIs in your awesome Go projects.