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 相关文章推荐
golang interface判断为空nil的实现代码
Apr 24 Golang
goland 恢复已更改文件的操作
Apr 28 Golang
go语言中json数据的读取和写出操作
Apr 28 Golang
golang 实现Location跳转方式
May 02 Golang
解决goland 导入项目后import里的包报红问题
May 06 Golang
go mod 安装依赖 unkown revision问题的解决方案
May 06 Golang
GoLang中生成UUID唯一标识的实现
May 08 Golang
入门学习Go的基本语法
Jul 07 Golang
Go语言特点及基本数据类型使用详解
Mar 21 Golang
Golang jwt身份认证
Apr 20 Golang
Go Grpc Gateway兼容HTTP协议文档自动生成网关
Jun 16 Golang
Go微服务项目配置文件的定义和读取示例详解
Jun 21 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
PHP冒泡排序算法代码详细解读
2011/07/17 PHP
浅谈PHP强制类型转换,慎用!
2013/06/06 PHP
php代码架构的八点注意事项
2016/01/25 PHP
PHP单元测试配置与使用方法详解
2019/12/27 PHP
用js实现控件的隐藏及style.visibility的使用
2013/06/14 Javascript
JS获取当前网址、主机地址项目根路径
2013/11/19 Javascript
javascript面向对象程序设计(一)
2015/01/29 Javascript
JavaScript中setter和getter方法介绍
2016/07/11 Javascript
JS输出空格的简单实现方法
2016/09/08 Javascript
详解AngularJs中$sce与$sceDelegate上下文转义服务
2016/09/21 Javascript
微信小程序中input标签详解及简单实例
2017/05/18 Javascript
关于JavaScript的单双引号嵌套问题
2017/08/20 Javascript
使用D3.js构建实时图形的示例代码
2018/08/28 Javascript
layDate日期控件使用方法详解
2018/11/15 Javascript
js实现自动播放匀速轮播图
2020/02/06 Javascript
[01:45]2014DOTA2 TI预选赛预选赛 大神专访第二弹!
2014/05/20 DOTA
[01:38]【DOTA2亚洲邀请赛】Sumail——梦开始的地方
2017/03/03 DOTA
用Python中的__slots__缓存资源以节省内存开销的方法
2015/04/02 Python
python实现文件快照加密保护的方法
2015/06/30 Python
Python批处理删除和重命名文件夹的实例
2018/07/11 Python
利用pyuic5将ui文件转换为py文件的方法
2019/06/19 Python
python爬取代理ip的示例
2020/12/18 Python
函数指针的定义是什么
2016/08/14 面试题
在对linux系统分区进行格式化时需要对磁盘簇(或i节点密度)的大小进行选择,请说明选择的原则
2012/11/24 面试题
法律专业应届本科毕业生求职信
2013/10/25 职场文书
硕士研究生自我鉴定范文
2013/12/27 职场文书
英文自荐信常用句子
2014/03/26 职场文书
工业自动化专业自荐信范文
2014/04/10 职场文书
《夹竹桃》教学反思
2014/04/20 职场文书
工作求职自荐信
2014/06/13 职场文书
HTML基础-标签分类(闭合标签,空标签,块级元素,行内元素,行级块元素,可替换元素)
2021/03/31 HTML / CSS
MySQL大小写敏感的注意事项
2021/05/24 MySQL
基于flask实现五子棋小游戏
2021/05/25 Python
ES6 解构赋值的原理及运用
2021/05/25 Javascript
vue实现移动端div拖动效果
2022/03/03 Vue.js
Python学习之异常中的finally使用详解
2022/03/16 Python