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 空map和未初始化map的注意事项说明
Apr 29 Golang
解决Go gorm踩过的坑
Apr 30 Golang
解决golang 关于全局变量的坑
May 06 Golang
Go遍历struct,map,slice的实现
Jun 13 Golang
go select编译期的优化处理逻辑使用场景分析
Jun 28 Golang
Go 语言中 20 个占位符的整理
Oct 16 Golang
Go语言的协程上下文的几个方法和用法
Apr 11 Golang
Golang数据类型和相互转换
Apr 12 Golang
GO语言异常处理分析 err接口及defer延迟
Apr 14 Golang
Golang jwt身份认证
Apr 20 Golang
Go调用Rust方法及外部函数接口前置
Jun 14 Golang
go goth封装第三方认证库示例详解
Aug 14 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
phpinfo 系统查看参数函数代码
2009/06/05 PHP
php 图片上添加透明度渐变的效果
2009/06/29 PHP
PHP根据IP判断地区名信息的示例代码
2014/03/03 PHP
PHP和MySql中32位和64位的整形范围是多少
2016/02/18 PHP
初学Javascript的一些总结
2008/11/03 Javascript
AlertBox 弹出层信息提示框效果实现步骤
2010/10/11 Javascript
js函数的延迟加载实现代码
2012/10/11 Javascript
JavaScript转换农历类实现及调用方法
2013/01/27 Javascript
js监听键盘事件示例代码
2013/07/26 Javascript
防止登录页面出现在frame中js代码
2014/07/22 Javascript
jQuery中children()方法用法实例
2015/01/07 Javascript
jquery.serialize() 函数语法及简单实例
2016/07/08 Javascript
浅谈angular4 ng-content 中隐藏的内容
2017/08/18 Javascript
jQuery 导航自动跟随滚动的实现代码
2018/05/30 jQuery
vuex根据不同的用户权限展示不同的路由列表功能
2019/09/20 Javascript
JavaScript Canvas编写炫彩的网页时钟
2019/10/16 Javascript
基于vue-cli3和element实现登陆页面
2019/11/13 Javascript
Vue的双向数据绑定实现原理解析
2020/02/17 Javascript
vue用elementui写form表单时,在label里添加空格操作
2020/08/13 Javascript
浅谈Vue使用Cascader级联选择器数据回显中的坑
2020/10/31 Javascript
手把手教你如何编译打包video.js
2020/12/09 Javascript
解决基于 keep-alive 的后台多级路由缓存问题
2020/12/23 Javascript
python使用 cx_Oracle 模块进行查询操作示例
2019/11/28 Python
用openCV和Python 实现图片对比,并标识出不同点的方式
2019/12/19 Python
浅谈ROC曲线的最佳阈值如何选取
2020/02/28 Python
安装多个版本的TensorFlow的方法步骤
2020/04/21 Python
财务会计专业个人求职信范本
2014/01/08 职场文书
政府信息公开实施方案
2014/05/09 职场文书
雷锋精神演讲稿
2014/05/13 职场文书
电子商务专业应届生求职信
2014/05/28 职场文书
初中国旗下的演讲稿
2014/08/28 职场文书
七一讲话心得体会
2014/09/05 职场文书
如何写好闭幕词
2019/04/02 职场文书
详解python网络进程
2021/06/15 Python
JS封装cavans多种滤镜组件
2022/02/15 Javascript
Python中time标准库的使用教程
2022/04/13 Python