欢迎光临
我们一直在努力

第一个go web

本文目录:

  1. 简单例子
  2. 单控制器
  3. 多控制器

第一个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()
}
 收藏 (0) 打赏

您可以选择一种方式赞助本站

支付宝扫一扫赞助

微信钱包扫描赞助

未经允许不得转载:家里蹲的狐狸 » 第一个go web

分享到: 生成海报
avatar

热门文章

评论 抢沙发

  • QQ号
  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

登录

忘记密码 ?

切换登录

注册

我们将发送一封验证邮件至你的邮箱, 请正确填写以完成账号注册和激活