package main

//gohttp底层实现,通过gohttp不是通过beego实现的输出
// import (
"io"
"log"
"net/http"
) func main() {
//设置路由
http.HandleFunc("/", sayHello)
err := http.ListenAndServe(":8080", nil)
if err != nil {
log.Fatal(err)
}
} func sayHello(w http.ResponseWriter, r *http.Request) {
io.WriteString(w, "hello vwesion1")
}
package main

//gohttp第二个版本:通过mux,handler实现路由

import (
"io"
"log"
"net/http"
) func main() {
mux := http.NewServeMux() //ServeMux//实现handler注册到ServeMux然后在进行路由的注册
mux.Handle("/", &myHandler{}) //注册路由和handler
mux.Handle("/hello", sayHello) //通过函数注册路由 err := http.ListenAndServe(":8080", mux)
if err != nil {
log.Fatal(err)
}
} type myHandler struct { //这个handle要实现ServerHTTP方法 } func (this *myHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
io.WriteString(w, "hello vwesion2,"+r.URL.String())
} func sayHello(w http.ResponseWriter, r *http.Request) {
io.WriteString(w, "hello vwesion2,"+r.URL.String())
}
package main

//模拟gohttp底层,第三个版本

import (
"fmt"
"io"
"log"
"net/http"
"os" //获取静态文件
"time"
) func main() {
server := http.Server{
Addr: ":8080",
Handler: &myHandler{}, //自定义handler
ReadTimeout: * time.Second,
} myMux = make(map[string]func(http.ResponseWriter, *http.Request)) //初始化map
myMux["/"] = sayHello //访问根目录调用sayHellp方法
myMux["/bye"] = sayBye //访问/bye调用sayBye方法 err := server.ListenAndServe()
if err != nil {
log.Fatal(err)
}
} type myHandler struct{} func (this *myHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { //handler来解析url,调用不同的方法,
if h, ok := myMux[r.URL.String()]; ok { //if ok 对map的断言,ok是判断存不存在,h是获取的map的value,
fmt.Println(h, ok)
h(w, r)
return
}
io.WriteString(w, "uuuu,"+r.URL.String())
} var myMux map[string]func(http.ResponseWriter, *http.Request) //自定义mux,根据不同的string调用不同的方法 func sayHello(w http.ResponseWriter, r *http.Request) {
io.WriteString(w, "hello "+r.URL.String())
} func sayBye(w http.ResponseWriter, r *http.Request) {
io.WriteString(w, "sayBye "+r.URL.String())
}
package main

//获取静态文件

import (
"io"
"log"
"net/http"
"os" //获取路径,静态文件服务器要获取绝对路径,根据当前路径定位到绝对路径,
) func main() {
mux := http.NewServeMux() //ServeMux//实现handler注册到ServeMux然后在进行路由的注册
mux.Handle("/", &myHandler{}) //注册路由和handler
mux.Handle("/hello", sayHello) //通过函数注册路由 wd, err := os.Getwd() //wd是当前路径
if err != nil {
log.Fatal(err)
} mux.Handle("/static/",
http.StripPrefix("/static/", http.FileServer(http.Dir(wd)))) //StripPrefix去除static前缀 err = http.ListenAndServe(":8080", mux)
if err != nil {
log.Fatal(err)
}
} type myHandler struct { //这个handle要实现ServerHTTP方法 } func (this *myHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
io.WriteString(w, "hello vwesion2,"+r.URL.String())
} func sayHello(w http.ResponseWriter, r *http.Request) {
io.WriteString(w, "hello vwesion2,"+r.URL.String())
}

最新文章

  1. java中Inetaddress类
  2. 【转~】初识贝塞尔曲线(Bézier curve)
  3. Django模板系统
  4. Behavior-Based Intelligence
  5. Java基础之线程——管理线程同步代码块(BankOperation4)
  6. 【php基础】XML,DTD实例
  7. uiview scale
  8. c语言,strcpy
  9. 从入行到现在(.net)
  10. awk基础 [马哥视频]
  11. cf B. Color the Fence
  12. TCP/IP之DNS域名解析系统
  13. 解决TabActivity中子页面不通过导航跳转到还有一个页面的问题
  14. CSS3+HTML5特效7 - 特殊的 Loading 效果
  15. sublime比较好用的插件
  16. C# new关键字和对象类型转换(双括号、is操作符、as操作符)
  17. Lintcode212 Space Replacement solution 题解
  18. Steam饥荒
  19. FileOutPutStream in 创新实训 自然语言交流系统
  20. Ubuntu 安装软件方法

热门文章

  1. 黑马毕向东Java基础知识总结
  2. history.go history.back()
  3. LLVM 概览
  4. MTK平台 GPU 相关知识
  5. 2018牛客网暑期ACM多校训练营(第一场)D图同构,J
  6. 创建Django项目(五)——URL配置和视图
  7. 【进击后端】Ubuntu 命令行 安装nginx
  8. CentOS7下安装单机版RabbitMQ及权限赋予
  9. [bzoj1934/2768][Shoi2007]Vote 善意的投票_最小割
  10. zoj——3195 Design the city