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 相关文章推荐
Go各时间字符串使用解析
Apr 02 Golang
Go缓冲channel和非缓冲channel的区别说明
Apr 25 Golang
golang 如何用反射reflect操作结构体
Apr 28 Golang
Golang Gob编码(gob包的使用详解)
May 07 Golang
Golang 实现获取当前函数名称和文件行号等操作
May 08 Golang
Go语言基础知识点介绍
Jul 04 Golang
基于Go语言构建RESTful API服务
Jul 25 Golang
如何解决goland,idea全局搜索快捷键失效问题
Apr 03 Golang
Golang数据类型和相互转换
Apr 12 Golang
Golang获取List列表元素的四种方式
Apr 20 Golang
Golang解析JSON对象
Apr 30 Golang
GoFrame gredis缓存DoVar Conn连接对象 自动序列化GoFrame gredisDo/DoVar方法Conn连接对象自动序列化/反序列化总结
Jun 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
thinkphp3.2点击刷新生成验证码
2016/02/16 PHP
PHP使用new StdClass()创建空对象的方法分析
2017/06/06 PHP
使用PHP连接数据库_实现用户数据的增删改查的整体操作示例
2017/09/01 PHP
php微信开发之关注事件
2018/06/14 PHP
laravel框架 api自定义全局异常处理方法
2019/10/11 PHP
最近项目写了一些js,水平有待提高
2009/01/31 Javascript
JQuery-tableDnD 拖拽的基本使用介绍
2013/07/04 Javascript
js判断当前浏览器类型,判断IE浏览器方法
2014/06/02 Javascript
jQuery移除tr无效的解决方法(tr是动态添加)
2014/09/22 Javascript
javascript常用函数归纳整理
2014/10/31 Javascript
15个jquery常用方法、小技巧分享
2015/01/13 Javascript
微信小程序中顶部导航栏的实现代码
2017/03/30 Javascript
BootStrap给table表格的每一行添加一个按钮事件
2017/09/07 Javascript
JS装饰器函数用法总结
2018/04/21 Javascript
解决v-for中使用v-if或者v-bind:class失效的问题
2018/09/25 Javascript
如何使用proxy实现一个简单完整的MVVM库的示例代码
2019/09/17 Javascript
细述Javascript的加法运算符的具体使用
2019/10/18 Javascript
Nodejs使用archiver-zip-encrypted库加密压缩文件时报错(解决方案)
2019/11/18 NodeJs
JavaScript实现简单日历效果
2020/09/11 Javascript
JavaScript中arguments的使用方法详解
2020/12/20 Javascript
使用Python编写简单网络爬虫抓取视频下载资源
2014/11/04 Python
Python多进程并发(multiprocessing)用法实例详解
2015/06/02 Python
深入理解Python中装饰器的用法
2016/06/28 Python
Python 判断文件或目录是否存在的实例代码
2018/07/19 Python
Python中一些深不见底的“坑”
2019/06/12 Python
python烟花效果的代码实例
2020/02/25 Python
浅析Python面向对象编程
2020/07/10 Python
CSS3 display知识详解
2015/11/25 HTML / CSS
C/C++程序员常见面试题二
2015/11/19 面试题
.net笔试题
2014/03/03 面试题
创意婚礼策划方案
2014/05/18 职场文书
贫困生助学金感谢信
2015/01/21 职场文书
歌舞青春观后感
2015/06/10 职场文书
2015年高校保卫处工作总结
2015/07/23 职场文书
golang日志包logger的用法详解
2021/05/05 Golang
Golang日志包的使用
2022/04/20 Golang