webserver http通讯
在前面搭建环境并实现hello world之后可以开展我们的工作。用go语言搭建一个webserver。
源码(hello.go)
package main
import(
"fmt"
"net/http"
"go"
“log”
)
func main(){
fmt.Print("web server start...")
http.HandleFunc("/", sayhelloName)
err := http.ListenAndServe(":9090", nil)
if err != nil{
log.Fatal("ListenAndServer: ", err)
}
}
func sayhelloName(w http.ResponseWriter, r *http.Request) {
w.Write([]byte("Hello World!")) //返回给客户端的信息
//fmt.Fprintf(w, "Hello Wrold!") //这个写入到w的是输出到客户端的
}
cmd窗口进入工程所在目录,执行go run hello.go
此时屏幕窗口输出web server start…说明程序已经正常启动,在浏览器输入http:localhost:9090
可以看到浏览器页面有Hello World!输出。perfect!!
前后端分离实现跨域访问
当前后端分离时由于网段、端口等不一致会出现跨域访问的问题,此时server端需要对响应头进行设置。在sayhelloName函数中增加响应头的设置
w.Header().Set("Access-Control-Allow-Origin", "*")
代表所有的域名都可以访问,此时可以解决跨域访问问题。
mux路由设置
golang自带的http.SeverMux路由实现简单
1.不支持正则路由
2.只支持路径匹配,不支持按照Method,header,host等信息匹配,所以也就没法实现RESTful架构
而gorilla/mux是一个强大的路由,小巧但是稳定高效,不仅可以支持正则路由还可以按照Method,header,host等信息匹配,可以从我们设定的路由表达式中提取出参数方便上层应用,而且完全兼容http.ServerMux
1.与http.ServerMux不同的是mux.Router是完全的正则匹配,设置路由路径/index/,如果访问路径/idenx/hello会返回404
2.设置路由路径为/index/访问路径/index也是会报404的,需要设置r.StrictSlash(true), /index/与/index才能匹配
在go的安装目录下的src文件夹内使用git clone http://github.com/gorilla/mux.git
下载mux的包,在import中增加”gorilla/mux“
main函数进行修改,仅接收post请求。
func main(){
fmt.Print("web server start...")
r := mux.NewRouter()
r.HandleFunc("/login", sayhelloName).Methods("POST")
// http.HandleFunc("/login", sayhelloName)
srv := &http.Server{
Handler:r,
Addr:":9090",
WriteTimeout:15 * time.Second,
ReadTimeout:15 * time.Second,
}
err := srv.ListenAndServe()
if err != nil{
log.Fatal("ListenAndServer: ", err)
}
}