Executing HTTP requests in golang can be used to create an api integration and automate workflows. The standard library “net/http” package can be used to create a request object and the DefaultClient can be used to execute the request. We can expand this basic example to create complex interactions between backend services communicating over HTTP APIs.

Playground: https://go.dev/play/p/AGV2OyqN-a6

package main

import (

func main() {
	// create a new request
	req, err := http.NewRequest(http.MethodGet, "https://jsonplaceholder.typicode.com/todos/1", nil)
	if err != nil {

	// add a header to the request
	req.Header.Add("Accept", "application/json")

	// make the request using the default client
	resp, err := http.DefaultClient.Do(req)
	if err != nil {
	// make sure to close the response body after we are done with it
	defer resp.Body.Close()

	// print the response status code
	println("STATUS CODE:", resp.StatusCode)
	println("STATUS TEXT:", "\""+resp.Status+"\"")

	// print the response headers
	for key, values := range resp.Header {
		for _, value := range values {
			println("  ", key+":", value)
	// read the response body into a byte slice
	body, err := io.ReadAll(resp.Body)
	if err != nil {
	// print the response body