本文目录:
第一个go web
package main
import (
"fmt"
"net/http"
)
func welcome(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "text/html;charset=utf-8")
fmt.Fprintln(w, "服务器返回的信息<b>加粗</b>")
}
func main() {
http.HandleFunc("/", welcome)//函数也是一种变量
http.ListenAndServe("localhost:8081", nil)
}
go run以后
package main
import (
"fmt"
"net/http"
)
func welcome(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "text/html;charset=utf-8")
fmt.Fprintln(w, "服务器返回的信息<b>加粗</b>")
}
func main() {
http.HandleFunc("/abc", welcome)//函数也是一种变量
http.ListenAndServe("localhost:8081", nil)
}
带模板
package main
import (
"html/template"
"net/http"
)
//显示登录页面,ResponseWriter是一个接口,Request是一个结构体
func login(w http.ResponseWriter, r *http.Request) {
t, _ := template.ParseFiles("view/login.html")
t.Execute(w, nil)
}
func main() {
s := http.Server{Addr: ":8080"} //Server是一个结构体
//Handle是一个函数,第一个参数是路径,第二个参数是一个Handler接口类型
//type Dir string 类型别名,http.Dir("static")就相当于一个Dir类型变量
// func FileServer(root FileSystem) Handler {
// return &fileHandler{root}
// }
//FileServer是一个函数,返回一个Handler
// type fileHandler struct {
// root FileSystem
// }
//fileHandler是一个结构体,他肯定实现了Handler里的ServeHTTP方法
http.Handle("/static/", http.StripPrefix("/static/", http.FileServer(http.Dir("static"))))
http.HandleFunc("/", login)
s.ListenAndServe() //Server结构体的第一个方法
}
单控制器
什么是单控制器?
localhost:8080
localhost:8080/abc
localhost:8080/123
访问上面的地址都是相同的,一个控制器控制所有地址
package main
import "net/http"
type myhandler struct{}
func (h *myhandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
w.Write([]byte("哈哈,返回的数据"))
}
func main() {
h := myhandler{}
server := http.Server{Addr: "localhost:8080", Handler: &h}
server.ListenAndServe()
}
多控制器
什么是多控制器?
localhost:8080/first
localhost:8080/second
每个路径对应一个页面,没有绑定的路径会404
package main
import "net/http"
type myhandler1 struct{}
type myhandler2 struct{}
func (h *myhandler1) ServeHTTP(w http.ResponseWriter, r *http.Request) {
w.Write([]byte("哈哈,myhandler1返回的数据"))
}
func (h *myhandler2) ServeHTTP(w http.ResponseWriter, r *http.Request) {
w.Write([]byte("哈哈,myhandler2返回的数据"))
}
func main() {
h1 := myhandler1{}
h2 := myhandler2{}
server := http.Server{Addr: "localhost:8080"}
http.Handle("/first", &h1)
http.Handle("/second", &h2)
server.ListenAndServe()
}
多控制器可以使用HandleFunc来简化
package main
import (
"fmt"
"net/http"
)
func first(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "text/html;charset=utf-8")
fmt.Fprintln(w, "哈哈,first返回的数据")
}
func second(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "text/html;charset=utf-8")
fmt.Fprintln(w, "哈哈,second返回的数据")
}
func main() {
server := http.Server{Addr: "localhost:8080"}
http.HandleFunc("/first", first)
http.HandleFunc("/second", second)
server.ListenAndServe()
}