golang http.Redirect()函数容易误解的地方

调用http.Redirect()函数后,并不会立刻进行跳转,而是继续顺序执行函数中的所有的代码后,再进行跳转。但是Redirect后面的写界面的代码不会发送到游览器前端的。

代码如下:
func Chat(w http.ResponseWriter, r *http.Request) {
  fmt.Println("Chat")
  r.ParseForm()
  withWho := r.Form.Get("withWho")

  type ToWho struct {
    Name string
  }

  if ret := CheckCookie(r); ret == "" || "" == withWho{
    url := "/login"
    http.Redirect(w,r, url, http.StatusFound)
  }

  toWho := ToWho{Name: withWho}
  t, err := template.ParseFiles("templates/html/chat.html")
  checkError(err)
  err = t.Execute(w, toWho)
  checkError(err)
}
虽然执行了红色的(Redirect)函数,但是绿色的代码还是会执行的,只是解析的chat.html文件不会像以前写到客户端上。为什么会这样?不懂啊。所以最好在Redirect后面加上Return比较好。

原文地址:https://www.cnblogs.com/xiaoleiel/p/8295635.html

时间: 2024-08-06 19:50:21

golang http.Redirect()函数容易误解的地方的相关文章

CakePHP redirect函数

public function getContract($value=''){ App::uses ( 'UserContractController', 'Controller' ); $Contract = new UserContractController(); $pdfs = $Contract->getContract(1); if($pdfs['code']!=1){ exit("<script>alert('".$pdfs['msg']."'

Golang通过自定义函数实现模板的包含

Golang通过自定义函数实现模板的包含 Golang原生不支持例如revel中指令{{ template "header.html" }} ? 1 package main import ( ? 1 2 3 4 "html/template" "log" "os" "io/ioutil" ) func main() { ? 1 2 3 s := ParseTmplateToStr("src/1.

Flask:redirect()函数

Windows 10家庭中文版,Python 3.6.4,Flask 1.0.2 重定向,就是在客户端提交请求后,本来是访问A页面,结果,后台给了B页面,当然,B页面中才有需要的信息. 在Flask中,使用redirect()函数实现重定向功能,函数原型如下:flask.redirect(location, code=302, Response=None) 参数说明: location是一个链接地址,可以使用url_for()函数得到,也可以是静态文件地址,测试了模板文件的地址,失败--看来模板

2.Golang开发之函数(function)

Golang开发之函数(function) 1. 声明函数 1.1 普通函数的声明形式 具体形式如下: func 函数名(参数列表)(返回值列表) { 函数体} 1.2 参数类型的简写 在参数列表中,如有多个参数变量,则以逗号分隔:如果相邻变量是同类型,则可以将类型省略.例如: func add(a, b int) int { return a + b} 1.3 函数的返回值 Go语言经常用多返回值返回函数执行发生的错误: conn, err := connectToNetwork() 1.3.

golang 内置函数new()

new() 这是一个用来分配内存的内置函数,它的第一个参数是一个类型,不是一个值,它的返回值是一个指向新分配的 t 类型的零值的指针. 在golang的代码定义如下: func new(t Type) *Type strut{} 直接使用struct{} 来初始化strut时,返回的是一个struct类型的值,而不是指针两者是不一样的 golang的new和make主要区别如下: 1.make只能用来分配及初始化类型为slice,map,chan的数据:new可以分配任意类型的数据 2.new分

golang字符串常用函数

package utils import "fmt" import "strconv" import "strings" var str string = "学golang使我快乐!" // 关于string的常用函数 // 1. len(str) 内建函数,返回字符串长度,按字节,1个汉字3字节 // 2. range []rune(str) 字符串遍历,处理中文问题 func F2() { for _,value := r

goLang(匿名函数)

go 匿名函数与其他语言基本上是无区别的,下面举个例子说明 package main import ( "fmt" ) func main() { a1,a2 := 1,2 rs := func(a int, b int) int { //()括号中是接受的参数 a1,a2 return a+b }(a1, a2) //() 括号中的是传入的参数 fmt.Println(rs) //调用匿名函数 结果输出3 //下面匿名函数不穿入参数,结果输出 rs2 func () { fmt.Pr

golang之匿名函数

1 package main 2 3 import "fmt" 4 5 /* squares返回一个匿名函数 6 * 该匿名函数每次调用返回下一个数的平方 7 * func name(parameter-list) (result-list) { 8 * body 9 * } 10 */ 11 12 func squares() func() int { 13 var x int 14 return func() int { 15 x++ 16 return x * x 17 } 18

ThinkPHP源码学习 redirect函数 URL重定向

/**  * URL重定向  * @param string $url 重定向的URL地址  * @param integer $time 重定向的等待时间(秒)  * @param string $msg 重定向前的提示信息  * @return void  */  $url='http://www.baidu.com';  $time=3; function redirect($url, $time=0, $msg='') { //多行URL地址支持     $url        = st