路由基础net/http的学习
===
有tp或者其他web基础的同学都知道路由这东西吧,
你看现在路由器的地址栏上的http://.....这些就路由
每一个路由对应不同的页面
好的我们现在就来写吧
*****
1.基础准备,配置golang 环境这些我就不必多说了吧
2.我们本次开发用到的IDE为golang这个安装和新建一个项目,我也不必多说了吧
3.新建一个main.go
```
package main
import (
"fmt"
"net/http"
)
func main() {
/*
这个是创建一个路由 路由地址 /hello
接收两个参数 第一个为response 第二个是request
(注:request 为什么是指针? 这个golang默认是值传递,如果你写 request http.Request 这样接收的参数是传递的副本拷贝的 这个是golang基础不懂的话去看官方文档啊~!)
writer.Write() response返回 要求是[]byte so你要转一下
好的 现在编译一下吧 运行下吧
go build .
然和通过浏览器 访问 http://127.0.0.1:8085/hello
*/
// url: http://127.0.0.1:8085/hello
http.HandleFunc("/hello", func(writer http.ResponseWriter, request *http.Request) {
writer.Write([]byte("Hello GOlang"))
})
fmt.Println("server is runing ...")
err := http.ListenAndServe(":8085", nil) //第一个是地址(ip:端口 ip可以省略 监听本机全部端口) 第二个是handler
if err != nil {
fmt.Println("server error:",err.Error())
}
}
```
![](https://box.kancloud.cn/66165a7bddd7207664c5cdf0be880f76_1920x1052.png)
哈哈golang写网页是不是非常简单的 如果对上面几个方法有不懂的地方
去官网看看golang net/http的库
### httprouter讲解
好了大家现在发现没有 第一章我让大家去了解下RESTful api
刚刚上面的例子 get post .. 都可以请求到
现在我就给大家讲一个httproter 库 为net/http的升级版
大家应该听过大名鼎鼎的git框架吧 他的路由实现就是靠 httproter实现的
1.第一步获得httproter
```
go get github.com/julienschmidt/httprouter
```
(还是推荐使用vgo做管理,有想法的同学可以去看看蛤)
现在我们已经获取了,现在就来改造一下我们的demo吧
等等刚刚还忘了说一个问题,如果所有的路由都在main方法里面写,最后来main是不是非常的大啊!
好的,现在我们就来用httproter顺便解决这个问题吧
```
package main
import (
"fmt"
"github.com/julienschmidt/httprouter"
"net/http"
)
/**
创建路由注册
*/
func RegisterRouter() *httprouter.Router {
router := httprouter.New() //得到router实例
//注册路由
// 路由后面可以跟.GET .POST .DELETE .PUT 等 (其他的怎么查看呢? 你按住ctrl 点赞 New()进入方法 看下面的代码 里面就是详情啊!)
// 第一个你发觉参数有些不同的吗? 对 多了一个params httprouter.Params 这个用来接收路由中的参数 等会来讲
// 我们先看GET POST都指向同一个路径 but返回不同的内容, 怎么测试呢? 百度postman 这个是测试基础啊!百度学习吧骚年 非常简单的
router.GET("/", func(writer http.ResponseWriter, request *http.Request, params httprouter.Params) {
writer.Write([]byte("this is get method"))
})
router.POST("/", func(writer http.ResponseWriter, request *http.Request, params httprouter.Params) {
writer.Write([]byte("this is post method"))
})
return router
}
func main() {
router := RegisterRouter() //注册路由
fmt.Println("server is runing ...")
//这里发现改变了什么吗?
//对第二次参数变成了router
err := http.ListenAndServe(":8085", router) //第一个是地址(ip:端口 ip可以省略 监听本机全部端口) 第二个是handler
if err != nil {
fmt.Println("server error:",err.Error())
}
}
```
好了我们再来看params httprouter.Params是什么东西,顺便解决吧路由分开
1.创建router文件夹
2.在里面方两个文件一个是router.go 一个handlers.go
├── main.go
├── router 路由层
│ ├── handlers.go
│ └── router.go
这样就完成了分离 是不是好看了许多啊!
![](https://box.kancloud.cn/8f9dacab0eeaa8a5aba53a117812c8ba_1912x923.png)
是不是很简单啊
我现在就吧当前的代码提交了吧,我去的github上看看吧,记住自己要练习啊!
[https://github.com/dollarkillerx/GolangWebCourseware/tree/%E8%B7%AF%E7%94%B1%E5%9F%BA%E7%A1%80](https://github.com/dollarkillerx/GolangWebCourseware/tree/%E8%B7%AF%E7%94%B1%E5%9F%BA%E7%A1%80)
- 初认GOlang Web
- 关于环境配置
- 路由
- 路由进阶与目录架构
- 静态文件服务器
- 自定义Middleware
- 与MySQL起舞
- 主从模式概念
- 部署主从集群
- 分库分表
- 补充:事务
- 补充:常用SQL示例
- Template使用
- 一些小的,但是要知道的东西
- 调度任务
- 流控算法
- 鉴权
- JWT鉴权前置知识:加密解密
- session
- 文件上传与下载
- 带缓存读写拷贝io
- 参考
- 写好的文件上传
- 文件下载
- 拓展:秒传功能实现
- 扩展:分块上传和断点续传
- 扩展:分块上传
- 扩展:断点续传
- 扩展:分布式存储
- 部署ceph集群
- cephAuth
- go操作ceph集群
- 扩展:云存储
- go操作oss
- 补充:xorm框架
- 命令小结
- 补充:xorm框架高级部分
- 补充
- MongoDB
- 基础概念
- 简简单单NoSql
- 操作集合(Collection)
- 操作文档(Document)
- 带条件的文档 db.find
- 复杂条件抽文档 db.find
- redis
- redis操作
- go操作redis
- (新增)配置鉴权
- 密码学
- 文件校验算法
- 未来课程的安排
- RPC实践
- 爬虫
- 正则表达式
- 爬取手机号
- 爬取邮箱
- 爬取超链接
- 爬取身份证号
- 并发爬图片
- 扩展:CICD
- GO实现自动化部署系统
- 国际化支持
- 并发带来问题的解决
- GOWEB小知识
- Sync包讲解
- sync.Pool
- 千万级WebSocket消息推送
- 微服务入门:开篇
- 路由通讯
- RabbitMQ
- RabbitMQ工作原理和转发模式
- Dcoker 下 RabbitMQ and Ui
- Go操作RabbitMQ
- 初步微服务
- go-micro
- 补充:consul
- 快速入门
- 补充:consul超时
- 微服务架构
- 微服务架构全景图
- 服务注册和发现
- raft协议基本概念
- raft协议leader选举详解
- raft协议日志复制详解
- raft协议safefy详解
- rpc调用个服务监控
- etcd
- 命令行使用
- Golang操作etcd
- GO操作etcd OP方式 (分布式锁基础)
- etcd 分布式集群乐观锁
- (新增)鉴权
- 服务注册
- 服务发现原理
- 选项设计模式介绍
- 基于插件的注册组建
- 课前知识
- etcd注册开发1
- ffmpeg
- 2.0新的启航
- 高可用Mysql
- mysql逻辑架构
- 常见的MySQL高可用方案
- 索引
- MYSQL调优
- 什么影响了MYSQL的性能
- Mysql 服务器参数配置
- Go深入并发
- 基本同步原语
- 扩展同步原语
- 原子操作
- M P G 模型
- 简单的消息总线
- GoMicro入门
- GO任务池编写
- GO依赖注入
- 一些补充
- golang defer在什么时候执行
- 分布式理论篇(面试吹牛必备)
- CAP理论
- Raft协议
- 保证注册中心的可靠性
- 链路追踪
- 怎么实现强一致性