dtrvzd1171 2017-11-29 18:55
浏览 55

为什么结构的字段是“非名称”(golang)

This code does not work. It complains that j.Bar is a "non-name":

package main

import "fmt"
import "os"

type foo struct {
    Bar string
    Baz int
}

func main() {
    var j foo

    // this next line fails with "non-name j.Bar on left side of :="
    j.Bar, ok := os.LookupEnv("SOME VAR")
    if ( ! ok ) {
        panic("lookup failed!")
    }
    fmt.Printf("j.Bar is now %s
",j.Bar)
}

Now I can change it easily to work:

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
",j.Bar)
}

I'm really puzzled by the "non-name" error. j.Bar is a string. os.LookupEnv() returns a string as its first value. So what is the problem with taking a string and putting it into a string variable?

  • 写回答

1条回答 默认 最新

  • douhai5835 2017-11-29 18:56
    关注

    The := operator simultaneously declares a new variable, and assigns a value to it. j.Bar is not a legal variable name in Go; variable names cannot contain periods. Now, obviously you're trying to assign a value to a struct field, not a variable with a period in its name (the compiler just doesn't know it). You can do this, using just assignment without declaration:

    var ok bool
    j.Bar, ok = os.LookupEnv("SOME VAR")
    

    Or this, declaring two variables at once:

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

    See also: Go tour on short variable declarations and the spec on short variable declarations.

    评论

报告相同问题?

悬赏问题

  • ¥15 echarts动画效果失效的问题。官网下载的例子。
  • ¥60 许可证msc licensing软件报错显示已有相同版本软件,但是下一步显示无法读取日志目录。
  • ¥15 Attention is all you need 的代码运行
  • ¥15 一个服务器已经有一个系统了如果用usb再装一个系统,原来的系统会被覆盖掉吗
  • ¥15 使用esm_msa1_t12_100M_UR50S蛋白质语言模型进行零样本预测时,终端显示出了sequence handled的进度条,但是并不出结果就自动终止回到命令提示行了是怎么回事:
  • ¥15 前置放大电路与功率放大电路相连放大倍数出现问题
  • ¥30 关于<main>标签页面跳转的问题
  • ¥80 部署运行web自动化项目
  • ¥15 腾讯云如何建立同一个项目中物模型之间的联系
  • ¥30 VMware 云桌面水印如何添加