精选文章 go 入门级 一个http服务

go 入门级 一个http服务

作者:云治 时间: 2021-02-05 09:43:08
云治 2021-02-05 09:43:08
【摘要】ServeMux 是go自带的http请求处理器,是一个路由表,存放key-value。根据请求路径(key)在路由表中查找,(按照最长匹配原则)并将请求交给对应的处理函数(value). 
导入http包,介绍几个方法: 
 http.ListenAndServe (addr string, handler Handler) //传入请求路径和路由表的handler
  handler :...

ServeMux 是go自带的http请求处理器,是一个路由表,存放key-value。根据请求路径(key)在路由表中查找,(按照最长匹配原则)并将请求交给对应的处理函数(value).

导入http包,介绍几个方法:

  1. http.ListenAndServe (addr string, handler Handler) //传入请求路径和路由表的handler
    
  2. handler :=http.NewServeMux()  //创建 一个路由表的handler
  3. handler.HandleFunc("/api/", handle_func)//注册路由表,HandleFunc会将函数转为实现了ServeHTTP接口的新类型,但是需要保证传入的handle_func是符合 func(ResponseWriter,*Request)类型的。

上代码啦:

package main

import (
	"encoding/json"
	"fmt"
	"net/http"
)

func requ(w http.ResponseWriter, r *http.Request){
	fmt.Println(r.Body)
	fmt.Println(r.Header)
	resp :=map[string]interface{}{"status": 0, "msg": "ok", "data": "get it!"}
	rr,_ := json.Marshal(resp)
	w.Header().Set("Content-Type", "application/json; charset=UTF-8")
	w.WriteHeader(http.StatusBadRequest)
	w.Write(rr)
}
func print_hello(w http.ResponseWriter, r *http.Request){
	resp :=map[string]interface{}{"data": "hello !"}
	rr,_ := json.Marshal(resp)
	w.WriteHeader(http.StatusOK)
	w.Write(rr)
}
func main(){
	address :="127.0.0.1:8080"
	mux:=http.NewServeMux()
	mux.HandleFunc("/", requ)
	mux.HandleFunc("/api/hi/",print_hello)
	//HandleFunc(pattern string, handler func(ResponseWriter, *Request))
	http.ListenAndServe(address, mux)
	//func ListenAndServe(addr string, handler Handler) error
}

现在在入门级基础上 加一下东西,判断请求的方法,和拿到请求中body体,上代码:

//server 端
func requ(w http.ResponseWriter, r *http.Request){ if r.Method!="POST"{
		resp :=map[string]interface{}{"status": -1, "msg": "请求方法错误", "data": ""}
		rr,_ := json.Marshal(resp)
		w.Header().Set("Content-Type", "application/json; charset=UTF-8")
		w.WriteHeader(http.StatusBadRequest)
		w.Write(rr)
		return 
	}
	body := make([]byte, r.ContentLength)
	r.Body.Read(body)
	//fmt.Println(body)
	var data interface{}
	err:=json.Unmarshal(body,&data)
	//解析失败会报错,如json字符串格式不对,缺"号,缺}等。
	if err!=nil{
		fmt.Println(err)
	} fmt.Println(data)//获取到的就是body体内容 //对于请求给出响应 
	resp :=map[string]interface{}{"status": 0, "msg": "ok", "data": "get it!"}
	rr,_ := json.Marshal(resp)
	w.Header().Set("Content-Type", "application/json; charset=UTF-8")
	w.WriteHeader(http.StatusOK)
	w.Write(rr) }
func print_hello(w http.ResponseWriter, r *http.Request){
	resp :=map[string]interface{}{"data": "hello !"}
	rr,_ := json.Marshal(resp)
	w.WriteHeader(http.StatusOK)
	w.Write(rr)
}
func main(){
	address :="127.0.0.1:8080"
	http.HandleFunc("/", requ)
	http.HandleFunc("/api/hi/",print_hello)
	//HandleFunc(pattern string, handler func(ResponseWriter, *Request))
	http.ListenAndServe(address, nil)
	//func ListenAndServe(addr string, handler Handler) error
}


// client 端

func Post(url string, data interface{}, contentType string)  { // 超时时间:5秒
	client := &http.Client{}
	jsonStr, _ := json.Marshal(data)
	fmt.Println(jsonStr)
	resp, err := client.Post(url, contentType, bytes.NewBuffer(jsonStr))
	if err != nil {
		panic(err)
	}
	defer resp.Body.Close()
	if resp.StatusCode==200{
		fmt.Println("调用成功") //或者可以处理服务端返回的数据 result, _ := ioutil.ReadAll(resp.Body)
	fmt.Pringln( string(result))
	} }

func main() { url:="http://127.0.0.1:8080"
	var data map[int]string=map[int]string{1:"chen",2:"tian"}
	fmt.Println(Post(url,data,"application/json"))

}

 

勿删,copyright占位
分享文章到微博
分享文章到朋友圈

上一篇:浅谈TCP优化

下一篇:盘一盘 Python 特别篇 20 - SciPy 稀疏矩阵

您可能感兴趣

  • 利用索引服务(Indexing Service)和ASP建立面向整个网站搜索程序,(有点像www.google.com)源程序

    配置Index Server 在执行Web服务器上的搜索之前,首先必须创建至少一个索引,并遵循以下步骤完成这项工作。 ⒈启动Windows 2000 Server服务器上的索引。 缺省情况下选择图标位于管理工具组中的计算机管理。窗口的右边提供关于当前在服务器上存在的索引信息。默认有两个索引:System和Web。 ⒉要创建新的索引,用鼠标右键单击索引服务或右边的面板,选定新建编录。 ...

  • UDDI :一种 XML Web 服务

    UDDI :一种 XML Web 服务 作者:Chris Lovett[url href=http://www.microsoft.com/china/msdn/voices/12182000-test.htm]UDDI 查询示例[/url](需要 Internet Explorer 5.x) [url href=http://www.uddi.org/]通用描述、发现和集成 (UDDI) ...

  • Windows2000的终端服务功能及应用

    Windows2000的终端服务功能及应用 Windows终端服务(Windows Based Termintal,即WBT)是Windows2000 Server/Advanced Server提供的一项标准服务,它允许用户以Windows界面的客户端访问Windows2000 Server/Advanced Server服务器,将Windows2000服务器界面切换到客户端的屏幕上,运...

  • 用Socket类实现HTTP协议客户端应用

    用Socket类实现HTTP协议客户端应用 梁颖健 liangyingjian@21cn.com Http客户端程序已集成在Java语言中,可以通过URLConnection类调用。遗憾的是,由于SUN没有公布Http客户程序的源码,它实现的细节仍是一个谜。本文根据HTTP协议规范,用Java.net.Socket类实现一个HTTP协议客户端程序。1.Socket类:了解TCP/IP协议...

  • 使用 .NET 框架将现有代码作为 Web 服务提供

    使用 .NET 框架将现有代码作为 Web 服务提供 使用 .NET 建立分布式应用程序 Steve Kirk 和 Priya DhawanMicrosoft Developer Network 摘要:本文介绍了使用 ASP.NET 将现有 Microsoft Visual Basic 6.0 代码作为 Web 服务提供时所进行的数据转换。适用于 Microsoft .NET SDK 和...

  • 使用 SOAP Toolkit 2.0 将现有代码作为 Web 服务提供

    使用 SOAP Toolkit 2.0 将现有代码作为 Web 服务提供 使用 .NET 建立分布式应用程序 Steve Kirk 和 Priya DhawanMicrosoft Developer Network 摘要:本文介绍了使用 Microsoft SOAP Toolkit 版本 2.0 将现有 Microsoft Visual Basic 6.0 代码作为 Web 服务提供时所...

  • 用C#创建Windows服务(Windows Services)

    用C#创建Windows服务(Windows Services)   Windows服务在Visual Studio 以前的版本中叫NT服务,在VS.net启用了新的名称。用Visual C# 创建Windows服务不是一件困难的事,本文就将指导你一步一步创建一个Windows服务并使用它。这个服务在启动和停止时,向一个文本文件中写入一些文字信息。   第一步:创建服务框架 要创建一个新的 ...

  • 理解服务

    理解服务马映冰(本文转载自软件工程专家网www.21cmm.com)   有一个数字告诉我们,IBM一年的收入中,有40%来自于咨询和服务。那么从另一个方面来看这个数字,可以这样理解,当一个用户拿了一万元钱来投资到信息系统建设的时候,差不多就要再准备一万元来购买服务了。  服务还要购买?乍听起来很不自在,其实,我们早已在为服务付费了,您在西餐厅购买一听可乐的价钱和您在超市购买时的价格肯定不同...

CSDN

CSDN

中国开发者社区CSDN (Chinese Software Developer Network) 创立于1999年,致力为中国开发者提供知识传播、在线学习、职业发展等全生命周期服务。

华为云40多款云服务产品0元试用活动

免费套餐,马上领取!
go 入门级 一个http服务介绍:华为云为您免费提供go 入门级 一个http服务在博客、论坛、帮助中心等栏目的相关文章,同时还可以通过 站内搜索 查询更多go 入门级 一个http服务的相关内容。| 移动地址: go 入门级 一个http服务 | 写博客