go语言的简单问题?

 

             

func twoSum(nums []int, target int) []int {
	prevNums := map[int]int{}
	for i, num := range nums {
		targetNum := target - num
		targetNumIndex, found := prevNums[targetNum]
		if found {
			return []int{targetNumIndex, i}
		} else {
			prevNums[num] = i
		}
	}
	return []int{}
}

 

能解释一下targetNumIndex, found := prevNums[targetNum] 这一句话嘛。

在编译的类型检查期间,hash[key] 以及类似的操作都会被转换成哈希的 OINDEXMAP 操作,中间代码生成阶段会在 cmd/compile/internal/gc.walkexpr 函数中将这些 OINDEXMAP 操作转换成如下的代码:v     := hash[key] // => v     := *mapaccess1(maptype, hash, &key) v, ok := hash[key] // => v, ok := mapaccess2(maptype, hash, &key)

 当接受一个参数时,会使用 runtime.mapaccess1,该函数仅会返回一个指向目标值的指针;     当接受两个参数时,会使用 runtime.mapaccess2,除了返回目标值之外,它还会返回一个用于表示当前键对应的值是否存在的 bool 值:

使用v,ok:=hash[k]比较好,这样能通过布尔值准确知道v==nil时,v到底是存储的元素还是表示该键对应的元素不存在