Go语言中Restful模式与Routes路由框架
1、用法:
(1)导入包github.com/drone/routes
(2)使用包中的New()方法建立一个routes.RouteMux对像的引用。其它也能理解为一个http.Handler,只是内部通过不同的方式如(GET、POST、PUT、DEL)进行了不同http.Handler的调用。
(3)通过net/http包下的ListenAndServe(":8088",mux),去启动一个Web服务。
(4)通过Get和POST方式分别去请求结果。路径中,将变量的部分替换成您要传递的值即可。如:mux.Post("/user/:uid/:age", edituser), 中可以通过POST请求发起地址:http://127.0.0.1:8088/user/song/23 去调用,此时系统将使用edituser方法,去处理代码。edituser方法中,可以通过r.URL.Query().Get(":uid")去取得用户id,如song。通过r.URL.Query().Get(":age")去取得年龄23.
2、代码:
//用法:routes其实是个路由框架,当你使用Get请求或Post请求请求转发好的地址时,它会根据相应路径,进行值拆分。不同的请求方式,将使用不同的路由去拆分。
package main import (
"fmt"
"net/http"
"net/url" "github.com/drone/routes"
) func getuser(w http.ResponseWriter, r *http.Request) {
var params url.Values = r.URL.Query()
var uid string = params.Get(":uid")
fmt.Fprintln(w, "get a user ", uid, " success!")
}
func getuserAndAge(w http.ResponseWriter, r *http.Request) {
var params url.Values = r.URL.Query()
var uid string = params.Get(":uid")
var age string = params.Get(":age")
fmt.Fprintln(w, "get a user ", uid, " success! age is ", age)
}
func edituser(w http.ResponseWriter, r *http.Request) {
var params url.Values = r.URL.Query()
var uid string = params.Get(":uid")
fmt.Fprintln(w, "edit a user ", uid, " success!")
}
func main() {
fmt.Println("正在启动WEB服务...")
var mux *routes.RouteMux = routes.New()
mux.Get("/user/:uid", getuser)
mux.Get("/user/:uid/:age", getuserAndAge)
mux.Post("/user/:uid", edituser) //http.Handle("/", mux)
http.ListenAndServe(":8088", mux)
fmt.Println("服务已停止")
}
3、运行结果:
D:/Application/Go/bin/go.exe build -i [D:/Projects/GoPath/source/demo/restful]
成功: 进程退出代码 0.
D:/Projects/GoPath/source/demo/restful/restful.exe [D:/Projects/GoPath/source/demo/restful]
正在启动WEB服务...
4、测试:
Go语言中Restful模式与Routes路由框架的更多相关文章
- C语言中的fread和fwrite
C语言中的fread和fwrite是专门用来操作文件的方法. 1. fread负责从打开的文件指针中读取文件内容. 函数原型:size_t fread(void *p, size_t size, si ...
- 关于Javascript语言中this关键字(变量)的用法
最近很多 Javascript初学者朋友总在问: Javascript 的this 关键字的用法.我在这里索性总结一下 this关键字的用法. this 关键字是面向对象编程语言中的一个重要概念!在J ...
- php 中函数获取可变参数的方法, 这个语法有点像 golang 语言中的
原文呢:http://php.net/manual/en/functions.arguments.php#functions.arguments.type-declaration.strict Onl ...
- C语言中,头文件和源文件的关系(转)
简单的说其实要理解C文件与头文件(即.h)有什么不同之处,首先需要弄明白编译器的工作过程,一般说来编译器会做以下几个过程: 1.预处理阶段 2.词法与语法分析阶段 3.编译阶段,首先编译成纯汇编语句, ...
- C 语言中 setjmp 和 longjmp
在 C 语言中,我们不能使用 goto 语句来跳转到另一个函数中的某个 label 处:但提供了两个函数——setjmp 和 longjmp来完成这种类型的分支跳转.后面我们会看到这两个函数在处理异常 ...
- c语言中的scanf在java中应该怎么表达,Scanner类。
1 java是面向对象的语言 它没有像C语言中的scanf()函数,但是它的类库中有含有scanf功能的函数 2 java.util包下有Scanner类 Scanner类的功能与scanf类似 3 ...
- C语言中do...while(0)的妙用(转载)
转载来自:C语言中do...while(0)的妙用,感谢分享. 在linux内核代码中,经常看到do...while(0)的宏,do...while(0)有很多作用,下面举出几个: 1.避免goto语 ...
- C语言中,定义的含义?声明的含义?它们之间的区别是什么?
在C语言中,对于定义和声明,也许我们非常的熟悉,但不一定真正的了解! 定义的含义:所谓定义,就是创建(编译器)一个对象,为这个对象分配一块内存空间并取名,也就是我们平常所说的变量名或对象名,一旦这个名 ...
- C++中函数的默认参数和C语言中volatile的学习
1.函数默认参数 1 int func(int a,int b=10) 2 { 3 return a*b; 4 } 5 6 int main() 7 { 8 int c=func(2); 9 cout ...
随机推荐
- 【Devops】【docker】【CI/CD】Jenkins源码管理,设置gitlab上项目的clone地址 + jenkins构建报错:Please make sure you have the correct access rights and the repository exists.
注意,如果 jenkins构建报错:Please make sure you have the correct access rights and the repository exists. 而此时 ...
- 打印mac地址
转自:http://blog.chinaunix.net/uid-546544-id-2096102.html 有这样两个宏可以方便地打印mac地址:#define MAC_FMT "%02 ...
- JAVA使用Marvin在图片中搜索图片
Java对图像的处理框架比较少,目前比较流行的有Jmagick以及Marvin,但Jmagick只能处理图像(上篇Java清除图片中的恶意信息(利用Jmagick)中对Jmagick已做过简略介绍), ...
- HTML5文件上传qq、百度、taobao等比较(改进支持三种状态提示)
拖拽过程详解: 1:文件未拖出文件选择框的时候提示:将要上传的文件或文件夹拖拽至此区域 2:文件拖出文件选择框但未拖入上传的文件框提示:请继续拖拽文件或文件夹至此区域 3:文件拖出文件选择框且已拖入上 ...
- [UI] 精美UI界面欣赏[13]
精美UI界面欣赏
- 女子监狱第一季/全集Orange Is the New Black迅雷下载
本季第一季 Orange Is the New Black 1 (2013) 看点:该剧描述主人公Piper Chapman(Taylor Schilling)在大学里结识了毒贩Alex(Laura ...
- Button 在布局文件中定义监听器,文字阴影,自定义图片,代码绘制样式,添加音效的方法
1.Button自己在xml文件中绑定监听器 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/andro ...
- Matlab中使用LaTeX
Matlab作为数据计算和处理的数学语言(软件),而LaTex作为出版界的重要排版语言(软件),尤其是对数学公式的排版功能特别强.在Matlab中有两种方法使用LaTeX:1)对Matlab生成的图形 ...
- adb 环境配置 常用命令 总结
配置环境变量 右键我的电脑 -> 属性 -> 高级 -> 环境变量 -> Path 在Path中添加Android SDK安装路径中 adb.exe 的路径,例如[\sdk\p ...
- Nginx限制某个IP同一时间段的访问次数和请求数示例代码
nginx可以通过ngx_http_limit_conn_module和ngx_http_limit_req_module配置来限制ip在同一时间段的访问次数. ngx_http_limit_conn ...