Variables if/else条件定义变量。未定义:dat(变量)

Variables if/else条件定义变量。未定义:dat(变量),variables,go,static,Variables,Go,Static,我知道这是一个基本问题,但我很好奇为什么下面的代码不起作用。没有不声明此变量的用例 if (bundled == "true") { dat, err := Asset("index.html") } else { dat, err := ioutil.ReadFile("./index.html") } if ( err != nil) { os.Exit(0)

我知道这是一个基本问题,但我很好奇为什么下面的代码不起作用。没有不声明此变量的用例

if (bundled == "true") {
            dat, err := Asset("index.html")
        } else {
            dat, err := ioutil.ReadFile("./index.html")

        }
        if ( err != nil) {
            os.Exit(0)
        }

        t, _ = t.Parse(string(dat))
        p := Person{Scope: ""}
        t.Execute(w, p)
我得到了错误

.\run.go:262: undefined: dat
我相信这只是我还在学习的基本的GOLANG知识


感谢您的支持

,否则
块有自己的作用域。在您的情况下,
dat
在其外部不可见

您可以在
if(bundled==“true”)
之前声明
var dat[]byte
来修复它

文件:


您可能还想阅读:

如果else
块有自己的作用域。在您的情况下,
dat
在其外部不可见

您可以在
if(bundled==“true”)
之前声明
var dat[]byte
来修复它

文件:


您可能还想阅读:

如果else
块有自己的作用域<代码>数据在其外部不可见。您可以在
if(bundled==“true”)
之前声明
var dat[]byte
来修复它。阅读:如何以我可以完成此请求的方式声明dat。有没有办法创建占位符。我不知道if/else在他们自己的空间里。兴趣声明所需范围内的变量。参考:
if-else
块有自己的作用域<代码>数据在其外部不可见。您可以在
if(bundled==“true”)
之前声明
var dat[]byte
来修复它。阅读:如何以我可以完成此请求的方式声明dat。有没有办法创建占位符。我不知道if/else在他们自己的空间里。兴趣声明所需范围内的变量。供参考:好的,我把它编译了,看看它是否有效。我必须事先声明这个dat:=[]字节{}。建议您更喜欢
vardat[]字节
而不是
dat:=[]字节{}
。主要原因是前者定义了一个nil片,而后者定义了一个空片。这不仅使检查切片更容易,而且在向切片添加某些内容之前,它可以避免分配切片(在这种情况下,您只需丢弃原始分配)。另外,您需要事先声明
err
变量,并完全消除if语句中的短形式赋值,否则您只需屏蔽
dat
变量。@Kaedys
@dat:=[]字节{}
不分配内存。
dat:=[]字节{}
dat:=make([]字节,0)。它不分配任何空间,但它*会*为片头中的指针分配地址(指向不占用内存的0长度数组)。从技术上讲,这比简单地创建切片头本身要昂贵,而且也没有用,因为无论如何,在第一次调用时仍必须创建一个新数组。它也更丑陋,但那只是我。另外,
dat==nil
仅适用于
var
版本。最后,
golint
专门检查并抱怨这样的空文本。空切片(空文本或
make([]类型,0)
,尽管后者是首选)的主要用例是程序是否返回切片(直接或作为更大数据结构的一部分)通过像JSON或Thrift之类的API编码系统。在这种情况下,在大多数编码中,
nil
片被编码为
null
,而空片被编码为
[]
(或在您使用的任何编码中的等效值)。好的,我已经编译了它,看看它是否有效。我必须事先声明这个dat:=[]字节{}。建议您更喜欢
vardat[]字节
而不是
dat:=[]字节{}
。主要原因是前者定义了一个nil片,而后者定义了一个空片。这不仅使检查切片更容易,而且在向切片添加某些内容之前,它可以避免分配切片(在这种情况下,您只需丢弃原始分配)。另外,您需要事先声明
err
变量,并完全消除if语句中的短形式赋值,否则您只需屏蔽
dat
变量。@Kaedys
@dat:=[]字节{}
不分配内存。
dat:=[]字节{}
dat:=make([]字节,0)。它不分配任何空间,但它*会*为片头中的指针分配地址(指向不占用内存的0长度数组)。从技术上讲,这比简单地创建切片头本身要昂贵,而且也没有用,因为无论如何,在第一次调用时仍必须创建一个新数组。它也更丑陋,但那只是我。另外,
dat==nil
仅适用于
var
版本。最后,
golint
专门检查并抱怨这样的空文本。空切片(空文本或
make([]类型,0)
,尽管后者是首选)的主要用例是程序是否返回切片(直接或作为更大数据结构的一部分)通过像JSON或Thrift之类的API编码系统。在这些情况下,在大多数编码中,
nil
片被编码为
null
,而空片被编码为
[]
(或在您使用的任何编码中的等效值)。