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时,那么是的,
*字符串
是完全可以的。