[英]GAE Go user service login url contains %A(MISSING)
所以这让我感到困惑了一段时间!
这是控制台中的一些代码:
func GetLoginLinks(w *http.ResponseWriter, r *http.Request) (string, error) {
c := appengine.NewContext(r)
u := user.Current(c)
if u == nil {
url, err := user.LoginURL(c, r.URL.String())
if err != nil {
http.Error(*w, err.Error(), http.StatusInternalServerError)
return "", err
}
c.Debugf("Return url: " + r.URL.String())
c.Debugf("login url: " + url)
c.Debugf("url type: %T", url)
v := LoginItem(url, "Login")
return v, nil
}
}
它给出以下输出:
2013/06/17 21:48:28 DEBUG: Return url: /
2013/06/17 21:48:28 DEBUG: login url: /_ah/login?continue=http%A(MISSING)//localhost%A(MISSING)8080/
2013/06/17 21:48:28 DEBUG: url type: string
将其上传到应用程序引擎本身时,也会失败。
我苦苦挣扎的是该函数的前4行直接来自开发人员指南。
格式错误:
如果为动词给出了无效的参数,例如为
%d
提供了一个字符串,则生成的字符串将包含问题的描述,如以下示例所示:Wrong type or unknown verb: %!verb(type=value) Printf("%d", hi): %!d(string=hi) Too many arguments: %!(EXTRA type=value) Printf("hi", "guys"): hi%!(EXTRA string=guys) Too few arguments: %!verb(MISSING) Printf("hi%d"): hi %!d(MISSING) Non-int for width or precision: %!(BADWIDTH) or %!(BADPREC) Printf("%*s", 4.5, "hi"): %!(BADWIDTH)hi Printf("%.*s", 4.5, "hi"): %!(BADPREC)hi
所有错误均以字符串
"%!"
开头"%!"
有时后面跟一个字符(动词),并以括号括起来。如果
Error
或String
方法在由打印例程调用时触发了panic
情况,则fmt
软件包会重新格式化来自紧急情况的错误消息,并用表明它来自fmt
软件包的指示来装饰它。 例如,如果String
方法调用panic("bad")
,则格式化后的消息看起来像%s(PANIC=bad)
发生故障时,
%s
仅显示正在使用的打印动词。
您的格式字符串无效。 您具有格式字符串的转义URL查询字符串:“ :
”转义为“ %3A
”。 “ %3A
”动词的格式参数丢失。 为了安全起见,切勿使用任意字符串作为格式字符串。 例如,
package main
import "fmt"
func main() {
url := "/_ah/login?continue=http%3A//localhost%3A8080/"
fmt.Printf("login url: " + url)
fmt.Println()
fmt.Printf("login url: %s", url)
fmt.Println()
}
输出:
login url: /_ah/login?continue=http%A(MISSING)//localhost%A(MISSING)8080/
login url: /_ah/login?continue=http%3A//localhost%3A8080/
写:
c.Debugf("login url: %s", url)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.