godoc/dl: add meta tags for go get golang.org/dl/go1.N

Updates golang/go#23223

Change-Id: I628cea181d3a0e6bb25fdd98e098581aa222e049
Reviewed-on: https://go-review.googlesource.com/123679
Reviewed-by: Andrew Bonventre <andybons@golang.org>
diff --git a/godoc/dl/dl.go b/godoc/dl/dl.go
index 6555940..629b6ca 100644
--- a/godoc/dl/dl.go
+++ b/godoc/dl/dl.go
@@ -16,6 +16,7 @@
 	"crypto/md5"
 	"encoding/json"
 	"fmt"
+	"html"
 	"html/template"
 	"io"
 	"net/http"
@@ -432,11 +433,31 @@
 		listHandler(w, r)
 		return
 	}
-	if !fileRe.MatchString(name) {
-		http.NotFound(w, r)
+	if fileRe.MatchString(name) {
+		http.Redirect(w, r, downloadBaseURL+name, http.StatusFound)
 		return
 	}
-	http.Redirect(w, r, downloadBaseURL+name, http.StatusFound)
+	if goGetRe.MatchString(name) {
+		if r.Method == "GET" || r.Method == "HEAD" {
+			w.Header().Set("Content-Type", "text/html; charset=utf-8")
+		}
+		w.Header().Set("Location", "https://golang.org/dl/#"+name)
+		w.WriteHeader(http.StatusFound)
+		fmt.Fprintf(w, `<!DOCTYPE html>
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<meta name="go-import" content="golang.org/dl git https://go.googlesource.com/dl">
+<meta http-equiv="refresh" content="0; url=https://golang.org/dl/#%s">
+</head>
+<body>
+Nothing to see here; <a href="https://golang.org/dl/#%s">move along</a>.
+</body>
+</html>
+`, html.EscapeString(name), html.EscapeString(name))
+		return
+	}
+	http.NotFound(w, r)
 }
 
 func validUser(user string) bool {
@@ -453,7 +474,10 @@
 	return fmt.Sprintf("%x", h.Sum(nil))
 }
 
-var fileRe = regexp.MustCompile(`^go[0-9a-z.]+\.[0-9a-z.-]+\.(tar\.gz|pkg|msi|zip)$`)
+var (
+	fileRe  = regexp.MustCompile(`^go[0-9a-z.]+\.[0-9a-z.-]+\.(tar\.gz|pkg|msi|zip)$`)
+	goGetRe = regexp.MustCompile(`^go[0-9a-z.]+\.[0-9a-z.-]+$`)
+)
 
 func initHandler(w http.ResponseWriter, r *http.Request) {
 	var fileRoot struct {