Slice 切片
slicelencapappendslice

题目:下面这段代码的输出结果是什么?

package main
import "fmt"

func sliceAppend(slice []int,v int) []int {
	return append(slice, v)
}

func main() {
	arr := make([]int,5, 10)
	for i := 0;i < 5;i++ {
		arr=append(arr,i)
	}
	
	slice := arr[:]
	slice2 := sliceAppend(slice,1000)
	
	slice3 := arr[:2]
	slice3 = append(slice3, 10)
	
	slice4 := arr[:8]
	sliceAppend(slice4,100)
	
	fmt.Println(arr,len(arr), cap(arr))
	fmt.Println(slice,len(slice), cap(slice))
	fmt.Println(slice2,len(slice2), cap(slice2))
	fmt.Println(slice3,len(slice3), cap(slice3))
	fmt.Println(slice4,len(slice4), cap(slice4))
}

这一题的考点比较多,我们这里总结一下相关的知识,理解了这些知识就能正确解答这道面试题。

slicelencaplencapslicesliceappendcapslicelencapsliceslicesliceslicesliceslicecap20482048512

正确答案:

[0 0 10 0 100 0 1 2 3 4] 10 10
[0 0 10 0 100 0 1 2 3 4] 10 10
[0 0 0 0 0 0 1 2 3 4 1000] 11 20
[0 0 10] 3 10
[0 0 10 0] 4 10
Map 字典
maprangemap

题目1:下面这段代码的输出结果是什么?

package main
import "fmt"
import "strconv"


type Value int
func main() {
	outMap := make(map[string]Value,10)
	for i := 0;i < 10;i++ {
		outMap1[strconv.Itoa(i)] = Value(i)
	}
	
	
	for k,v range outMap {
		fmt.Printf("%v: %v ", k,v)
	}
	fmt.Println()
}
maprangemaprange

正确答案:

输出结果不能确定

题目2:下面这段代码的输出结果是什么?

package main
import "fmt"
import "strconv"

func changeMap1(map1 map[string]Value,k string,v Value) {
	map1[k] = v
}
func changeMap2(map2 map[string]*Value,k string,v Value) {
	*map2[k] = v
}

type Value int
func main() {
	outMap1 := make(map[string]Value,10)
	for i := 0;i < 10;i++ {
		outMap1[strconv.Itoa(i)] = Value(i)
	}
	
	outMap2 := make(map[string]*Value,5)
	for k,v := range outMap1 {
		outMap2[k] = &v
	}
	
	outMap1["5"] = 10
	changeMap1(outMap1, "8",100)
	
	*outMap2["2"] = 100
	changeMap2(outMap2, "4",1000)
	
	for i := 0;i < 10;i++ {
		fmt.Printf("%v ", outMap1[strconv.Itoa(i)])
	}
	fmt.Println()
	
	for i := 0;i < 10;i++ {
		fmt.Printf("%v ", *outMap2[strconv.Itoa(i)])
	}
	fmt.Println()
}
mapmap

知识点:

mapmaprangemaprangerangemaprange

正确答案:

0 1 2 3 4 10 6 7 100 9 
1000 1000 1000 1000 1000 1000 1000 1000 1000 1000