Welcome to part 9 of the Go programming tutorial series. We started off with a simple "hello world" web app example, which lead us down a two-tutorial digression about structs and methods, and now we're back to web devleopment!
We've shown how to display some basic text, but this is quite a bit unlike something like Python's web frameworks, where you can only return one thing. We can instead do:
package main import ("fmt" "net/http") func index_handler(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "<h1>Whoa, Go is neat!</h1>") fmt.Fprintf(w, "<p>Go is fast!</p>") fmt.Fprintf(w, "<p>...and simple!</p>") } func about_handler(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "Expert web design by Harrison Kinsley") } func main() { http.HandleFunc("/", index_handler) http.HandleFunc("/about/", about_handler) http.ListenAndServe(":8000", nil) }
If you run this, you will see that all 3 statements come out as 3 lines. You can have some basic variables with:
fmt.Fprintf(w, "<p>You %s even add %s</p>", "can", "<strong>variables</strong>")
package main import ("fmt" "net/http") func index_handler(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "<h1>Whoa, Go is neat!</h1>") fmt.Fprintf(w, "<p>Go is fast!</p>") fmt.Fprintf(w, "<p>...and simple!</p>") fmt.Fprintf(w, "<p>You %s even add %s</p>", "can", "<strong>variables</strong>") } func about_handler(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "Expert web design by Harrison Kinsley") } func main() { http.HandleFunc("/", index_handler) http.HandleFunc("/about/", about_handler) http.ListenAndServe(":8000", nil) }
If you view the source here, you'll see that everything is on the same line. If that bothers you enough, you can do a multi-line string in go with `
:
fmt.Fprintf(w, ` <h6>You can even do ...</h6> <h5>multiple lines ...</h5> <h4>in one %s</h4>`, "formatted print")
You may notice, in this case, viewing the source, your code is tabbed over as it is in your .go file. You can untab it, and this will be fixed. Full code up to this point:
package main import ("fmt" "net/http") func index_handler(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "<h1>Whoa, Go is neat!</h1>") fmt.Fprintf(w, "<p>Go is fast!</p>") fmt.Fprintf(w, "<p>...and simple!</p>") fmt.Fprintf(w, "<p>You %s even add %s</p>", "can", "<strong>variables</strong>") fmt.Fprintf(w, ` <h6>You can even do ...</h6> <h5>multiple lines ...</h5> <h4>in one %s</h4>`, "formatted print") } func about_handler(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "Expert web design by Harrison Kinsley") } func main() { http.HandleFunc("/", index_handler) http.HandleFunc("/about/", about_handler) http.ListenAndServe(":8000", nil) }
Now that we've got some understanding of Go basics and web dev with it, we need some sort of project. Everyone seems to build a blog with web dev tutorials, so I am going to go ahead and...not do that. Instead, I'm going to have us create a news aggregator. The first step to this is to pull information from websites, which we need to cover, so that's what we're going to be talking about in the next part.