Go 不能使用&;dashUrl(类型*[]字节)作为赋值中的类型*字符串
我正在尝试解析一个可能为空的表单帖子,如果为空,我将更改该变量。正在尝试使用Go 不能使用&;dashUrl(类型*[]字节)作为赋值中的类型*字符串,go,Go,我正在尝试解析一个可能为空的表单帖子,如果为空,我将更改该变量。正在尝试使用*字符串类型。我遇到的问题是,它不转换为dashUrl,而是转换为start\u时间 package main import ( "encoding/base64" "strconv" "github.com/gocraft/web" ) type YoutubeContext struct { StartTime *float64 `json:"start_time"` Da
*字符串类型。我遇到的问题是,它不转换为dashUrl
,而是转换为start\u时间
package main
import (
"encoding/base64"
"strconv"
"github.com/gocraft/web"
)
type YoutubeContext struct {
StartTime *float64 `json:"start_time"`
DashUrl *string `json:"dash_url"`
}
func (c *YoutubeContext) SetYoutubeContext(rw web.ResponseWriter, req *web.Request, next web.NextMiddlewareFunc) {
if f, err := strconv.ParseFloat(req.FormValue("start_time"), 64); err == nil {
c.StartTime = &f
}
if dashUrl, dashUrlDecodeErr := base64.StdEncoding.DecodeString(req.FormValue("dash_url")); dashUrlDecodeErr == nil {
c.DashUrl = &dashUrl
}
}
func main() {
}
它显示的错误是
/test.go:19:无法将&dashUrl(type*[]字节)用作分配中的type*字符串
在地鼠闲聊中得到帮助,需要制作一个临时变量
blah := string(dashUrl)
c.DashUrl = &blah
被帮助在地鼠闲聊时,需要做一个临时变量
blah := string(dashUrl)
c.DashUrl = &blah
你并不需要一个临时变量,你只需要一个正确的类型:正如API文档所说的base64.StdEncoding.DecodeString
返回一个[]字节
片段,而不是字符串。对,但是如果它是空的,我会尝试使它成为整个程序后面的指针。首先,字符串指针是Go中的反模式:string
类是轻量级的,即使它在内部指向大量数据块。其次,如果您知道它返回一个字节片,那么为什么要给它一个字符串指针呢。第三,您需要的是非常主观的,不一定是一个好的设计:string
指针对于URL来说就像字节片一样不自然——实际上您可能需要一个字符串。很高兴你找到了解决方案。@OlegSklyar,字符串指针是一种标准且惯用的方法,可以区分字符串、空字符串和零值。它在许多API中大量使用,我不会一开始就称它为反模式。@OlegSklyar,如果您需要区分空字符串和未设置字符串,特别是在处理需要序列化的API时,那么是的,*字符串
非常好。您实际上不需要临时变量,您只需要一个正确的类型:正如API文档所说,base64.StdEncoding.DecodeString
返回一个[]字节
片段,而不是字符串。对,但我试图使它成为整个程序中稍后的指针,如果它为空,我会更改它。首先,字符串指针是Go中的反模式:string
类是轻量级的,即使它在内部指向大量数据块。其次,如果您知道它返回一个字节片,那么为什么要给它一个字符串指针呢。第三,您需要的是非常主观的,不一定是一个好的设计:string
指针对于URL来说就像字节片一样不自然——实际上您可能需要一个字符串。很高兴你找到了解决方案。@OlegSklyar,字符串指针是一种标准且惯用的方法,可以区分字符串、空字符串和零值。它在许多API中大量使用,我不会一开始就称它为反模式。@OlegSklyar,如果您需要区分空字符串和未设置字符串,特别是在处理需要序列化的API时,那么是的,*字符串
是完全可以的。