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 ...
随机推荐
- Xcode6 itunes完美打包api 方法
转:http://bbs.csdn.net/topics/390948190 Xcode6 itunes完美打包api 方法! 特点轻盈小巧,方便快捷!
- UITableView分割线样式与颜色
tv.separatorStyle = UITableViewCellSeparatorStyleSingleLine; //设置样式 tv.separatorColor = [UIColor c ...
- 【linux】find命令仅返回文件名 不用返回完整的文件路径
正常查询 find /apps/swapping -name '*swapping*.jar' 在/apps/swapping 目录下 查找 文件名为 '包含swapping的并且以.java结尾的文 ...
- ASP.NET MVC:mvc pattern
There are three pieces to the MVC pattern: The model—The domain that your software is built around. ...
- java容器的总结
1.什么是容器? 在程序中,容器是一种用来容纳对象的数据结构,比如说list.set .map.queue. 2.为什么需要容器? 我们为什么需要容器呢?因为在程序中,我们会在任意时刻和任意位置创建任 ...
- 推荐Java基础
(一) 基础篇 01. Java多线程系列--“基础篇”01之 基本概念 02. Java多线程系列--“基础篇”02之 常用的实现多线程的两种方式 03. Java多线程系列--“基础篇”03之 T ...
- 用UICollectionView实现无限轮播图
用UICollectionView实现无限轮播图 效果 源码 https://github.com/YouXianMing/Animations 细节
- Android之防止反编译技巧
1. 判断程序是否运行在模拟器上 boolean isRunningInEmualtor() { boolean qemuKernel = false; Process process = null; ...
- 用layer-list实现图片旋转叠加、错位叠加、阴影、按钮指示灯
先来看看一个简单的文件: <?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:a ...
- C#零基础入门08:代码规范
一:前言 没有规矩,不成方圆.在代码的世界中,尤其这样.作为程序员,我们不想让我们的代码写出去之后被人耻笑:看,连个换行都换的这么不专业.作为开发主管,我们则不想我们的组员写出来的代码各类风格都有,五 ...