Goのパッケージ net/http は http プロトコルのクライアントとサーバーの機能を提供します[1]

サーバ側のコード例
package main

import (
	"fmt"
	"log"
	"net/http"
)

func main() {
	http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
		fmt.Fprintf(w, `
<!DOCTYPE html>
<html lang="ja">
  <head>
    <meta charset="utf-8">
    <title>Go Web server</title>
  </head>
  <body>
    <h1>このウェブサービスはGoで走っています。</h1>
     %v
     <p><a href="/link">/link</a></p>
  </body>
</html>
`, r)
	})
	http.HandleFunc("/link", func(w http.ResponseWriter, r *http.Request) {
		fmt.Fprintf(w, `
<!DOCTYPE html>
<html lang="ja">
  <head>
    <meta charset="utf-8">
    <title>Go Web server</title>
  </head>
  <body>
    <h1>リンク先</h1>
     %v
     <p><a href="/">TOP</a></p>
  </body>
</html>
`, r)
	})
	log.Fatal(http.ListenAndServe(":8080", nil))
}
http.HandleFuncの第二引数に匿名関数を使いました
バッククォートで囲まれた文字列はバッククオート以外のすべての文字がエスケープされないので複数行のHTMLを埋めこむのに便利です
  1. ^ http package - net/http - Go Packages”. pkg.go.dev (2022年6月1日). 2022年7月11日閲覧。