Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Go 为什么结构是';s字段a“;非姓名“;_Go - Fatal编程技术网

Go 为什么结构是';s字段a“;非姓名“;

Go 为什么结构是';s字段a“;非姓名“;,go,Go,此代码不起作用。它抱怨j.Bar是一个“非名字”: 现在我可以轻松地将其更改为工作模式: package main import "fmt" import "os" type foo struct { Bar string Baz int } func main() { var j foo val, ok := os.LookupEnv("SOME VAR") if ( ! ok ) { panic("lookup failed!"

此代码不起作用。它抱怨j.Bar是一个“非名字”:

现在我可以轻松地将其更改为工作模式:

package main

import "fmt"
import "os"

type foo struct {
    Bar string
    Baz int
}

func main() {
    var j foo

    val, ok := os.LookupEnv("SOME VAR")
    if ( ! ok ) {
        panic("lookup failed!")
    }
    j.Bar = val
    fmt.Printf("j.Bar is now %s\n",j.Bar)
}

“没有名字”的错误让我很困惑。j、 酒吧是一根绳子。作为它的第一个价值。那么,获取字符串并将其放入字符串变量有什么问题呢?

操作符同时声明一个新变量,并为其赋值
j.Bar
在Go中不是合法的变量名;变量名不能包含句点。现在,很明显,您正在尝试为struct字段赋值,而不是为名称中带有句点的变量赋值(编译器只是不知道而已)。您可以只使用赋值而不使用声明:

var ok bool
j.Bar, ok = os.LookupEnv("SOME VAR")
或者,一次声明两个变量:

bar,ok := os.LookupEnv("SOME VAR")
if ok {
    j.Bar = bar
}

另请参见:and。

运算符同时声明一个新变量,并为其赋值
j.Bar
在Go中不是合法的变量名;变量名不能包含句点。现在,很明显,您正在尝试为struct字段赋值,而不是为名称中带有句点的变量赋值(编译器只是不知道而已)。您可以只使用赋值而不使用声明:

var ok bool
j.Bar, ok = os.LookupEnv("SOME VAR")
或者,一次声明两个变量:

bar,ok := os.LookupEnv("SOME VAR")
if ok {
    j.Bar = bar
}

另请参见:和。

另请参见:另请参见:真棒,完美的解释:)真棒,完美的解释:)