Menu Close

Go – HTTP ServeTLS Function in Go

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


Go, a programming language developed by Google, has grown in popularity because of its simplicity, efficiency, and strong support for concurrent programming. One of the essential components of modern web applications is handling secure HTTP connections. In Go, the net/http package provides a built-in function called http.ServeTLS that makes it easy to serve HTTPS requests. This article will dive into the http.ServeTLS function, discuss its details, and provide a practical example of how to use it in a Go application.

What is http.ServeTLS ?

The http.ServeTLS function is part of the net/http package and is used to start an HTTPS server that listens and serves incoming requests over a secure connection. It is similar to the http.Serve function but adds support for TLS (Transport Layer Security), which encrypts the data exchanged between the client and server.

Function signature:

func (srv *Server) ServeTLS(l net.Listener, certFile, keyFile string) error
  • srv: A pointer to an http.Server struct, which contains server configurations.
  • l: A net.Listener interface implementation that listens for incoming network connections.
  • certFile: The path to the TLS certificate file (PEM encoded).
  • keyFile: The path to the private key file associated with the certificate (PEM encoded).

The function returns an error if there is a problem with the server setup, certificate, or private key.


To demonstrate the usage of the http.ServeTLS function, let’s create a simple Go web server that serves a “Hello, World!” message over HTTPS:

Prepare the TLS certificate and private key

First, you need to obtain a TLS certificate and the corresponding private key. You can either get a certificate from a certificate authority (CA) like Let’s Encrypt or generate a self-signed certificate for testing purposes. To create a self-signed certificate and private key, run the following command:

openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365

Create the Go server

Save the following code in a file named main.go:

package main

import (

func main() {
    // Define a simple handler function
    handler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
        fmt.Fprint(w, "Hello, World!")

    // Create a new http.Server with custom configurations
    server := &http.Server{
        Addr:    ":8443",
        Handler: handler,

    // Prepare the TLS certificate and private key file paths
    certFile := "./cert.pem"
    keyFile := "./key.pem"

    // Create a listener for incoming connections
    listener, err := net.Listen("tcp", server.Addr)
    if err != nil {
        log.Fatalf("Failed to create listener: %v", err)

    // Start the HTTPS server using http.ServeTLS
    fmt.Println("Server running on https://localhost:8443")
    err = server.ServeTLS(listener, certFile, keyFile)
    if err != nil {
        log.Fatalf("Failed to start server: %v", err)

Run the server

Execute the following command to run the server:

go run main.go

You should see the message “Server running on https://localhost:8443“. Now, you can visit https://localhost:8443 in your web browser, and you will be greeted with a security warning since it’s a self-signed certificate.


In this article, we have explored the http.ServeTLS function in Go, which allows us to serve HTTPS traffic using TLS. We discussed its purpose, usage, and provided a practical example demonstrating its implementation.

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 *