Menu Close

Go – HTTP ServeFile Function in Go

In this article, we will explore the http ServeFile function in Go net/http package in detail, along with examples.


The Go programming language, also known as Golang, is widely known for its simplicity, performance, and ease of use. One of the many powerful features it offers is its built-in HTTP package, net/http, which provides tools for creating web servers and clients. In this article, we will take a deep dive into the http.ServeFile function, discussing its purpose, usage, and providing a practical example.

What is http.ServeFile?

The http.ServeFile function is a part of Go’s net/http package and is designed to serve static files efficiently. It enables you to serve files, such as images, stylesheets, or JavaScript files, from your web server with minimal code. It takes care of handling necessary headers, caching, and even partial file requests.

The function signature is as follows:

func ServeFile(w ResponseWriter, r *Request, name string)
  • w (ResponseWriter): An interface that allows you to write the response that will be sent to the client.
  • r (*Request): A pointer to the incoming HTTP request.
  • name (string): The local file system path of the file to be served.


Serving a Static File with http.ServeFile.

Let’s create a simple web server that serves an HTML file using the http.ServeFile function. First, we will create an HTML file called index.html:

<!DOCTYPE html>
<html lang="en">
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Go ServeFile Example</title>
    <h1>Hello, Gophers!</h1>
    <p>This page is served using http.ServeFile in Go.</p>

Now, let’s create a Go file called main.go:

package main

import (

func main() {
    http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
        http.ServeFile(w, r, "index.html")

    log.Println("Listening on :8080...")
    if err := http.ListenAndServe(":8080", nil); err != nil {

In this example, we create an HTTP server that listens on port 8080. When a client sends a request to the root path (“/”), the anonymous function we defined is called, which in turn calls http.ServeFile to serve our index.html file.

To test our server, build and run the main.go file:

$ go build main.go
$ ./main

Navigate to http://localhost:8080 in your web browser, and you should see the content of the index.html file displayed.

Details and Considerations

  1. Error handling: If there’s an error while serving the file, such as the file not existing or a permissions issue, http.ServeFile will generate an appropriate HTTP error response.
  2. Caching: http.ServeFile automatically sets caching headers, such as “Last-Modified” and “ETag,” to enable browser caching. If the client sends a request with the “If-Modified-Since” or “If-None-Match” header, the function will return a 304 Not Modified status if the file hasn’t changed.
  3. Partial requests: The function also supports partial requests (Range requests) out of the box, allowing clients to download parts of a file,


The http.ServeFile function in Go provides an easy and efficient way to serve static files over HTTP. With the right error handling and security measures in place, you can build robust web applications that deliver assets quickly and reliably.

To check more Go related articles. Pls click given below link:

Posted in golang, net, packages

Leave a Reply

Your email address will not be published. Required fields are marked *