go - 为什么在 Go 的 if 语句中创建结构是非法的?

标签 go

Go 提示在 if 语句中实例化结构。为什么?是否有不涉及临时变量或新函数的正确语法?

type Auth struct {
    Username    string
    Password    string
}

func main() {
    auth := Auth { Username : "abc", Password : "123" }

    if auth == Auth {Username: "abc", Password: "123"} {
        fmt.Println(auth)
    }
}

错误(在 if 语句行):语法错误:意外 :,期望 := 或 = 或逗号

这会产生同样的错误:

if auth2 := Auth {Username: "abc", Password: "123"}; auth == auth2 {
            fmt.Println(auth)
}

这按预期工作:

auth2 := Auth {Username: "abc", Password: "123"};
if  auth == auth2 {
        fmt.Println(auth)
}

最佳答案

您必须用括号括住 == 的右侧。否则 go 会认为 '{' 是 'if' block 的开始。以下代码工作正常:

package main

import "fmt"

type Auth struct {
    Username    string
    Password    string
}

func main() {
    auth := Auth { Username : "abc", Password : "123" }
    if auth == (Auth {Username: "abc", Password: "123"}) {
        fmt.Println(auth)
    }
}

// Output: {abc 123}

关于go - 为什么在 Go 的 if 语句中创建结构是非法的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15773969/

相关文章:

json - 无法处理 golang 结构中的 json 字符串数据

go - 如何通过组合不同包的接口(interface)来创建接口(interface)?

if-statement - 在模板中使用条件

go - 在 docker exec 响应开始时解释并删除无用的字节

http - 在 Go 中读取请求负载?

go - 从[]个字节中解析浮点值的最佳方法是什么?

google-app-engine - Google App Engine 错误中的 LookupHost

windows - Go 无法在 DLL 中查找过程

Golang 反向代理返回 Not found 或 Forbidden 错误

bash - 去工具 vert 。 |& grep -v vendor ;真