GO语言可以通过http模块创建一个http服务器主要方法如下:
http.HandleFunc
第一次参数路径名 第二个参数处理的函数名
如:http.HandleFunc(“/”, GetHanle)
http.ListenAndServe
第一个参数:监听的端口和服务地址
第二个参数:处理的方法
http.ListenAndServe("0.0.0.0:8080", nil)
http.ListenAndServeTLS
参数1:地址和端口号
参数2:证书文件
参数3:私钥文件
参数3:处理方法
http.ListenAndServeTLS("0.0.0.0:8080", "server.crt", "server.pem", nil)
完整代码:
import (
"fmt"
"net/http"
)
func main() {
http.HandleFunc("/", GetHanle)
http.ListenAndServe("0.0.0.0:8080", nil)
}
func GetHanle(w http.ResponseWriter, r *http.Request) {
fmt.Fprintln(w, "get 方法")
}
如何返回JSON数据
通过以上方法实现了简单的get服务,但是只是返回的字符串,如果要返回JSON怎么做?
func main() {
http.HandleFunc("/", GetHanle)
http.ListenAndServe("0.0.0.0:8080", nil)
}
func GetHanle(w http.ResponseWriter, r *http.Request) {
//fmt.Fprintln(w, "get 方法")
w.Header().Set("content-type", "text/json")
msg := make(map[string]string)
msg["code"] = "1"
msg["msg"] = "正常"
ret, _ := json.Marshal(msg)
w.Write(ret)
}
这样就返回了JSON数据
如何接受POST的请求
上面的方法只是简单的get请求,那么如何接受post请求呢?
func PostHanle(w http.ResponseWriter, r *http.Request) {
r.ParseForm()
username := r.Form.Get("username")
password := r.Form.Get("password")
msg := make(map[string]string)
msg["username"] = username
msg["password"] = password
ret, _ := json.Marshal(msg)
w.Write(ret)
}
通过以上方法就可以获得Post参数,客户端发送数据的时候请求类型application/x-www-form-urlencoded
那么如何知道对方是什么请求呢,或则这个方法我只想接收POST请求。
通过r.Method返回的字符串可以判断当前用户请求的类型
代码如下:
func PostHanle(w http.ResponseWriter, r *http.Request) {
r.ParseForm()
if r.Method == "POST" {
//如果是POST 请求
username := r.Form.Get("username")
password := r.Form.Get("password")
msg := make(map[string]string)
msg["username"] = username
msg["password"] = password
ret, _ := json.Marshal(msg)
w.Write(ret)
} else {
fmt.Fprintln(w, "不支持类型")
}
}