goweb应用工作原理(用于个人学习)
客户端发送请求给多路复用器,多路复用器根据请求------->处理器处理器-------->模型------->数据库
数据库找到相应的数据反馈给模型,模型将数据封装发给处理器 ,处理器给模板引擎然后生成模板
go里面有相应的http的包直接调用即可,这一点比java相对方便很多,下面有几种方式可以搭建服务器
hanglerFunc方式
package main //声明包
import ( //导入包
"fmt" //打印使用
"net/http" // http服务使用
)
//处理器
func hangler(w http.ResponseWriter, r *http.Request) { //名称可以随意命名 函数的参数不可随意命名
fmt.Fprintln(w, "hello goweb", r.URL.Path) //写到前台页面上去
}
func main() {
http.HandleFunc("/", hangler) //更具web原理 添加路径 添加处理器 将路径和处理器产生关联
http.ListenAndServe(":8080", nil) // 端口号
}
Mux多路复用方式
package main
import (
"fmt"
"net/http"
)
func hangler(w http.ResponseWriter, r *http.Request) {
fmt.Fprintln(w, "hello goweb", r.URL.Path)
}
func main() {
mux := http.NewServeMux() //多路服务器处理请求
http.HandleFunc("/", hangler)
http.ListenAndServe(":8080", mux)
}
handle
package main //声明包
import (
"fmt" // 打印
"net/http"// http
"time"
)
type Myhangdler struct{} //定义结构体
func (m *Myhangdler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
fmt.Fprintln(w, "通过自己创建的处理器处理请求自定义hangler")
}
func main() {
myhangdler := Myhangdler{} //实例化接工体
server := http.Server{
Addr: ":8080", //声明端口
Handler: &myhangdler, //声明处理器
ReadTimeout: 2 * time.Second, //读取时间设置
}
server.ListenAndServe() // 应用到监听中去
//http.Handle("/myhangler", &myhangdler)
//http.ListenAndServe(":8080", nil)
}