Hone logo
Hone
Problems

Implement a Basic HTTP GET Client in Go

This challenge requires you to build a fundamental HTTP GET client in Go. You will learn how to make requests to web servers, retrieve data, and handle the response. This is a crucial skill for interacting with web APIs, fetching configuration from remote sources, and much more in Go applications.

Problem Description

Your task is to create a Go function that accepts a URL as a string and performs an HTTP GET request to that URL. The function should then return the body of the response as a string. You'll need to handle potential errors during the request and response processing.

Key Requirements:

  • The function should accept a single string argument representing the URL to fetch.
  • It should perform an HTTP GET request to the provided URL.
  • It should read the entire response body.
  • It should return the response body as a string.
  • It should return an error if any step of the process fails (e.g., invalid URL, network issues, server errors).

Expected Behavior:

  • For a valid URL, the function should return the content of the webpage or API response.
  • For an invalid URL or network problems, an appropriate error should be returned.
  • If the server returns a non-2xx status code, this should also be treated as an error and reported.

Edge Cases to Consider:

  • URLs with malformed syntax.
  • URLs that point to non-existent resources.
  • Network connectivity issues.
  • Large response bodies.
  • Server returning an error status code (e.g., 404, 500).

Examples

Example 1: Input: "https://httpbin.org/get" Output: map[string]interface{}{...} (a map representing the JSON response, or a string representation of it) Explanation: This URL returns a JSON object describing the GET request itself. The function should successfully fetch this JSON and return its content.

Example 2: Input: "https://example.com" Output: string (HTML content of the example.com homepage) Explanation: A standard GET request to a well-known website should return its HTML.

Example 3: Input: "invalid-url" Output: nil, error (an error indicating an invalid URL) Explanation: The function should detect that "invalid-url" is not a valid URL format and return an error.

Example 4: Input: "https://httpbin.org/status/404" Output: nil, error (an error indicating a 404 Not Found status) Explanation: The function should check the HTTP status code of the response and return an error if it's not a success code (2xx).

Constraints

  • The URL string will be at most 2048 characters long.
  • The response body size can vary, but assume it will fit comfortably in memory for this exercise.
  • Network latency will not be a primary concern for the correctness of the output, but efficient handling of I/O is good practice.

Notes

  • Go's standard library provides excellent tools for making HTTP requests. Look into the net/http package.
  • You'll need to consider how to read from an io.Reader (the response body) and convert it into a string.
  • Remember to close the response body when you are finished with it to prevent resource leaks.
  • The net/http package has functions for both initiating requests and handling responses.
Loading editor...
go