golang 实现Location跳转方式


Posted in Golang onMay 02, 2021

golang作为互联网时代的C语言,对网络的支持是非常友好的,最近想做个短网址转发使用,自然想到用Golang开发。

闲话少说,直接上源码:

package main 
import (
 "fmt"
 "log"
 "net/http"
)
 
func login(w http.ResponseWriter, r *http.Request) {
 fmt.Print(fmt.Sprintf("%v+", r))
 w.Header().Set("Cache-Control", "must-revalidate, no-store")
 w.Header().Set("Content-Type", " text/html;charset=UTF-8")
 w.Header().Set("Location", "http://wap.baidu.com/")//跳转地址设置
 w.WriteHeader(307)//关键在这里!
}
func main() {
 http.HandleFunc("/", login)              //设置访问的路由
 err := http.ListenAndServe(":9090", nil) //设置监听的端口
 if err != nil {
  log.Fatal("ListenAndServe: ", err)
 }
}

补充:Go获取Location重定向url

go本身不提供重定向的url,如果想要获取,只能从源码下手。

http.Get()接收到一个url后,会进一步确认,是否包含重定向url,如果包含,自动转到新的url,我们需要做的就是在这之前截取重定向url。

进入到http包中找到函数:

//自用,保留url地址信息,头部大写进行暴露
var RedirectMy string //此行源码中没有,为自己添加
 
func defaultCheckRedirect(req *Request, via []*Request) error {
 //自用,将url根据需求进行组合
 RedirectMy = "//"+req.URL.Host+req.URL.Path//此行源码中没有,为自己添加
 if len(via) >= 10 {
  return errors.New("stopped after 10 redirects")
 }
 return nil
}

从源码中可以看出,go本身支持10次重定向,超过10次便会报错。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持三水点靠木。如有错误或未考虑完全的地方,望不吝赐教。

Golang 相关文章推荐
win10下go mod配置方式
Apr 25 Golang
goland 恢复已更改文件的操作
Apr 28 Golang
浅谈Golang 嵌套 interface 的赋值问题
Apr 29 Golang
golang 实现Location跳转方式
May 02 Golang
golang 定时任务方面time.Sleep和time.Tick的优劣对比分析
May 05 Golang
Golang Gob编码(gob包的使用详解)
May 07 Golang
浅谈GO中的Channel以及死锁的造成
Mar 18 Golang
简单聊聊Golang中defer预计算参数
Mar 25 Golang
Golang原生rpc(rpc服务端源码解读)
Apr 07 Golang
Golang实现可重入锁的示例代码
May 25 Golang
Go本地测试解耦任务拆解及沟通详解Go本地测试的思路沟通的重要性总结
Jun 21 Golang
Go语言编译原理之变量捕获
Aug 05 Golang
解决golang post文件时Content-Type出现的问题
May 02 #Golang
对Golang中的FORM相关字段理解
May 02 #Golang
解决go在函数退出后子协程的退出问题
Apr 30 #Golang
Go语言 go程释放操作(退出/销毁)
golang DNS服务器的简单实现操作
golang slice元素去重操作
Apr 30 #Golang
Golang中interface{}转为数组的操作
Apr 30 #Golang
You might like
评分9.0以上的动画电影,剧情除了经典还很燃
2020/03/04 日漫
php自动注册登录验证机制实现代码
2011/12/20 PHP
php判断两个浮点数是否相等的方法
2015/03/14 PHP
php为字符串前后添加指定数量字符的方法
2015/05/04 PHP
对于Laravel 5.5核心架构的深入理解
2018/02/22 PHP
PHP生成zip压缩包的常用方法示例
2019/08/22 PHP
extJs 下拉框联动实现代码
2010/04/09 Javascript
JS函数验证总结(方便js客户端输入验证)
2010/10/29 Javascript
addEventListener()第三个参数useCapture (Boolean)详细解析
2013/11/07 Javascript
使用jquery.validate自定义方法实现"手机号码或者固话至少填写一个"的逻辑验证
2014/09/01 Javascript
jquery中show()、hide()和toggle()用法实例
2015/01/15 Javascript
javascript中slice(),splice(),split(),substring(),substr()使用方法
2015/03/13 Javascript
JS获取及设置TextArea或input文本框选择文本位置的方法
2015/03/24 Javascript
JQuery+Ajax实现数据查询、排序和分页功能
2015/09/27 Javascript
JS组件Bootstrap Select2使用方法详解
2020/04/17 Javascript
jQuery判断checkbox选中状态
2016/05/12 Javascript
Jquery和JS获取ul中li标签的实现方法
2016/06/02 Javascript
需要牢记的JavaScript基础知识
2016/09/25 Javascript
微信小程序 wx.request(object) API详解及实例代码
2016/09/30 Javascript
NodeJS使用formidable实现文件上传
2016/10/27 NodeJs
JavaScript实现删除数组重复元素的5种常用高效算法总结
2018/01/18 Javascript
JavaScript多种页面刷新方法小结
2019/04/04 Javascript
vue elementUI 表单校验功能之数组多层嵌套
2019/06/04 Javascript
vue 实现购物车总价计算
2019/11/06 Javascript
简单了解常用的JavaScript 库
2020/07/16 Javascript
JS中队列和双端队列实现及应用详解
2020/09/29 Javascript
原生JavaScript实现随机点名表
2021/01/14 Javascript
Python的装饰器模式与面向切面编程详解
2015/06/21 Python
Python tkinter 下拉日历控件代码
2020/03/04 Python
解决echarts中饼图标签重叠的问题
2020/05/16 Python
python使用自定义钉钉机器人的示例代码
2020/06/24 Python
课堂教学改革实施方案
2014/03/17 职场文书
停水通知
2015/04/16 职场文书
2015年学校财务工作总结
2015/05/19 职场文书
python树莓派通过队列实现进程交互的程序分析
2021/07/04 Python
数据分析数据库ClickHouse在大数据领域应用实践
2022/04/03 MySQL