golang多返回值的估值顺序

问题

问题代码:

    m := map[string]int{"Go": 0}
    s := []int{1, 1, 1}
    olds := s
    n := 2
    p := &n


    s, m["Go"], *p, s[n] = []int{2, 2, 2}, s[1], m["Go"], 5
    fmt.Println(m, s, n) // map[Go:1] [2 2 2] 0
    fmt.Println(olds)    // [1 1 5]

有大佬能说说上述代码的估值顺序吗,具体是怎么估值的呀,看了<<GO101>>书里边看到的案例,但是不感觉还是说的不太清楚。

分析

目前明确的估值顺序好像有:

  1. 方法、通道、函数的估值按照调用顺序进行
  2. 包变量具有依赖时先对依赖进行估值,不存在依赖的两个变量估值顺序取决于编译器实现

上述代码s与s[n]的顺序是不是也是取决于编译器而展现出不一致吗?还是说有有其他的说法?

git hub issue:github.com/golang/go/issues/15620

go
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!