Skip to content

Instantly share code, notes, and snippets.

This file has been truncated, but you can view the full file.
{"id": "4SM8+pIl/tiScWSqUW3dPtpdzILQ8onnEHKk/ZkdA8h12U8SgQYoIelW8lXzWRX6u3KBNgRdtG36NQ8vGSGhqEnRG43XOegwDmQRLkAEx7Soo6QalQ2Y6H69nCMU0ZgVmUVvXYj1/l8pN1rtqd6WYZeORgbcJ+H/ymHQowtee13p/lJMsX9+j8vZqkllAdUiT+UYGiXRu7wW+Sh6hJZDHTVMjqwJUgP7xVE6Kg8h2vzO8xZVYZ2+sHDgrCI1Cq+mNrvSulj1MHl1t89a6IBJ9GnQEvWG4bxXxl5/Q8Gj4cmsAWxzprETQl0lCjNr5UHjZbXJZ8pHfyblzKWQjn/Dte56GMV+8H/fw40gQg3Ci9LTi8ex9o9chW8mZHSdmyKw9XfgRRSfC6HgbcJRl2DX3vFMQi1RTI8f2hSRe2kzokMpwnGr+u93Z0quQmPIzhj+sKcsRW9KYZVVC5gi7gsELrtDFwBCDBeaAihlX2FZegz5t5LVtshydBClq5elcG/EDN3cSf9fMBgzC4yUwoqYl4HDjLGMuw1GzrlW6R43THQGogILZv3G5P+QqmF5Y8+gnqtj+XeaT/pJCh35Vcray1uBH9CbIOjAI7pQO3Hjp5gmt5AtIoda0lt2PUD/0+jQP3oeBOHfrQqR8WZ07ojlzGZPjqsdZAAflAVWKKx0WCFNaqYXAJTlCBCJoOIt04TQ+zVmL8ISxO0YPORPpDqx0NrDUoA9JhbvIPHrvKSn8gq+a71zBYHZFpLRf3ygV4T1od7w8sVX8HLbKOgOXNEXsnV5aNQneQy1LflLCWTCIpLI1cv9mqAu/oxAoDy5LmzV+oWRegrU17DsITvEFNMywuKOIEyHedYMKCgLz0mD4RyMdgQGdnmnz0abEPONXQsJpzHn5UmDSlSHwSZ5fxbCtJNdnOYaoKPmjD70RwT5IzTEXHnQGoTYLMf4IpBbC/xr7rhXu8XNja9Vbqr/2hOniE3Ma8GoHttBCi+kbxgVs7V8/EMoU9hm6Vr9
func main() {
addr := flag.String("addr", ":4000", "HTTP network address")
debug := flag.Bool("debug", false, "Enable debug mode")
dsn := flag.String("dsn", "web:pass@/snippetbox?parseTime=true", "MySQL data source name")
secret := flag.String("secret", "s6Ndh+pPbnzHbS*+9Pk8qGWhTzbpa@ge", "Secret key")
flag.Parse()
infoLog := log.New(os.Stdout, "INFO\t", log.Ldate|log.Ltime)
errorLog := log.New(os.Stderr, "ERROR\t", log.Ldate|log.Ltime|log.Lshortfile)
// In the handler:
func myHandler(w http.ResponseWriter, r http.Request) {
tx, err := db.Begin()
if err != nil {
tx.Rollback()
return
}
err := money.Insert(tx, 123)
if err != nil {
// In the handler:
func myHandler(w http.ResponseWriter, r http.Request) {
tx, err := db.Begin()
if err != nil {
tx.Rollback()
return
}
err := money.Insert(tx, 123)
if err != nil {
@alexedwards
alexedwards / gist.go
Created August 9, 2019 08:32
ACME Autocert for Go
package main
import (
"crypto/tls"
"flag"
"fmt"
"log"
"net/http"
"time"
@alexedwards
alexedwards / gist.go
Last active August 2, 2019 07:38
Intercepted HTTP response with multiple middlewares
package main
import (
"io"
"log"
"net/http"
"github.com/go-chi/chi"
"github.com/go-chi/chi/middleware"
)
package main
import (
"encoding/gob"
"fmt"
"net/http"
"github.com/alexedwards/scs/v2"
)
@alexedwards
alexedwards / gist.go
Created April 29, 2019 10:26
Test authentication
func TestCreateSnippetForm(t *testing.T) {
app := newTestApplication(t)
ts := newTestServer(t, app.routes())
defer ts.Close()
// Check that an unauthenticated is 302 redirected to /user/login
code, headers, _ := ts.get(t, "/snippet/create")
if code != 302 {
t.Errorf("want %d; got %d", 302, code)
}
@alexedwards
alexedwards / gist.go
Last active August 13, 2022 12:28
SCS v2 Manual Load and Save
package main
import (
"io"
"net/http"
"github.com/alexedwards/scs/v2"
)
var session = scs.NewSession()
@alexedwards
alexedwards / gist.go
Last active August 13, 2022 12:59
SCS v2 Multiple Sessions
package main
import (
"database/sql"
"fmt"
"log"
"net/http"
"time"
"github.com/alexedwards/scs/v2"