登录
首页 >  Golang >  Go问答

如何在 for 循环中声明基于结构的变量

来源:stackoverflow

时间:2024-03-06 20:57:29 363浏览 收藏

各位小伙伴们,大家好呀!看看今天我又给各位带来了什么文章?本文标题《如何在 for 循环中声明基于结构的变量》,很明显是关于Golang的文章哈哈哈,其中内容主要会涉及到等等,如果能帮到你,觉得很不错的话,欢迎各位多多点评和分享!

问题内容

这是一个在 for 循环之前声明变量的工作程序。

package main

import "fmt"

type brackets struct {
    ch   string
    pos  int
}

type stack []brackets

func main() {
    p := brackets{ch: "a"}
    st := make(stack,0)
    for i :=  0; i < 3; i++ {
        p = brackets{ch: "a", pos: 1}
        st = append(st, p) 
        fmt.println(p)
        fmt.println(st)
    }
}

我想声明相同的变量作为 for 循环的一部分。如何?这是一个错误的尝试。

package main

import "fmt"

type brackets struct {
    ch   string
    pos  int
}

type stack []brackets

func main() {
//    p := brackets{ch: "a"}
//    st := make(stack,0)
    for st, p, i :=  make(stack,0), brackets{ch: "a"}, 0; i < 3; i++ {
        p = brackets{ch: "a", pos: 1}
        st = append(st, p) 
        fmt.Println(p)
        fmt.Println(st)
    }
}

我收到以下错误: 语法错误:st, p, i := make(stack, 0),括号用作值

我很困惑,因为声明整数和字符串等标准类型非常容易。为什么不是我的结构?


解决方案


composite literal section of the specification 说:

当使用 literaltype 的 typename 形式的复合文字作为操作数出现在“if”、“for”或“switch”语句块的关键字和左大括号之间时,就会出现解析歧义,并且复合文字不包含在圆括号、方括号或花括号中。在这种罕见的情况下,文字的左大括号被错误地解析为引入语句块的大括号。为了解决歧义,复合文字必须出现在括号内。

通过在复合文字周围添加括号来修复代码:

for st, p, i :=  make(stack,0), (brackets{ch: "a"}), 0; i < 3; i++ {
    p = brackets{ch: "a", pos: 1}
    st = append(st, p) 
    fmt.Println(p)
    fmt.Println(st)
}

Run it on the playground

今天带大家了解了的相关知识,希望对你有所帮助;关于Golang的技术知识我们会一点点深入介绍,欢迎大家关注golang学习网公众号,一起学习编程~

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>