首页 > 解决方案 > 调试模式下的奇怪切片模式 - Go 和 Visual Studio 代码

问题描述

所以这并不是什么大问题,因为我最终得到了我想要的结果,但我想知道当我在 Visual Studio 代码中使用调试器时,是否有人知道为什么我的切片会经历来回模式。

这是我所拥有的:


                partialKey := code + id + service
                state:="CA"
                clientId := "test"

                var combo = []string{partialKey + clientId + state,
                    partialKey + clientId + util.Constants.DEFAULT_STATE
                    partialKey + util.Constants.DEFAULT_ID + state,
                    partialKey + util.Constants.DEFAULT_ID + util.Constants.DEFAULT_STATE,
                }

当我调试代码并单击跳过按钮时,它会从切片的第一行开始执行这种奇怪的模式(var combo =...所以我将调用该 line1,最后一行将是 line4)。线路1 线路2 线路1 线路2 线路3 线路2 线路3 线路4 线路3 线路4

然后在那之后我得到了具有正确格式的预期四项切片,所以这不是一个真正的问题,但我只是好奇这是否是一个 Go 的事情或者这是由 Visual Studio 代码调试器引起的,有人可以告诉我为什么一个或另一个这样做?

标签: godebuggingvisual-studio-codeslice

解决方案


这是 delve 调试器在这种数组声明中的行为。

发生的情况是,数组中的每个项目都需要在插入数组之前进行构造。因此,当跨过调试器时,会在每个表达式处停止。

var combo = []string{
  partialKey + clientId + state,                                        // EXP 1
  partialKey + clientId + util.Constants.DEFAULT_STATE,                 // EXP 2
  partialKey + util.Constants.DEFAULT_ID + state,                       // EXP 3
  partialKey + util.Constants.DEFAULT_ID + util.Constants.DEFAULT_STATE,// EXP 4
}

如果我们从数组初始化中提取项目构造,则数组在一个步骤中被初始化。

item1 := partialKey + clientId + state               
item2 := partialKey + clientId + util.Constants.DEFAULT_STATE
item3 := partialKey + util.Constants.DEFAULT_ID + state        
item4 := partialKey + util.Constants.DEFAULT_ID + util.Constants.DEFAULT_STATE

var combo = []string{item1, item2, item3, item4} // This is now one expression

推荐阅读