账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    go的多重赋值问题
    50
    0
    package main
    
    import ("fmt")
    
    func fibonacci() func(int) int {
        pre_pre, pre := 1, 1;
        return func(x int) int {
            if x == 0 || x == 1 {
                return pre
            } else {
                tmp := pre_pre + pre
    
                //第一种
                //pre_pre = pre
                //pre = tmp
    
                //第二种
                //pre_pre, pre = pre, tmp
    
                //第三种
                pre, pre_pre = tmp, pre
    
                return tmp
            }
        } 
    }
    
    func main() {
        f := fibonacci()
        for i := 0; i < 10; i++ {
            fmt.Println(f(i))
        }
    }

    用迭代输出斐波那契数列,在迭代数列中两个前置数的时候,我用了3种方法:
    注释中的第一种,最常见的。
    注释中的第二种和第三种,用了go的多重赋值的特性。
    关键是:第二种第三种都能正确输出数列
    这我就纳闷了,这个多重赋值的执行顺序到底是怎样的?它是怎么正确解析出我的赋值步骤的(即第一种里面的步骤)?

    1
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • Zero子夜 普通会员 1楼

      在Go语言中,Go的赋值操作符不支持多重赋值,即在同一作用域内,不能对变量进行两次赋值。

      例如:

      go a := 1 b := a

      这将导致编译错误,因为变量ab的值都是1。

      如果你需要在Go中实现多重赋值,你可以使用嵌套的赋值语句,或者使用其他方法,如使用第三方库如go表达式库exprs

      go var a int = 1 var b int = a

      或者

      go a, b := 1, a

      请注意,这些方法在某些情况下可能会导致性能问题,因为Go语言对内存管理比较严格,只允许在一个作用域内进行单例赋值。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部