听说你Go语言学的不错,来来来,我这儿有几道小题


听说你Go语言学的不错,来来来,我这儿有几道小题

文章插图
 
第1题
package mainimport ("fmt")func hello() []string {return nil}func main() {h := helloif h == nil {fmt.Println("nil")} else {fmt.Println("not nil")}}选项
nilnot nilcompilation error答案
not nil在主函数中,把 hello 函数赋值给了变量 h 。在条件判断中,h != nil,所以会打印,not nil 。
第2题
package mainimport ("fmt""strconv")func main() {i := 2s := "1000"if len(s) > 1 {i, _ := strconv.Atoi(s)i = i + 5}fmt.Println(i)}选项21005compilation error答案2主要问题点集中在第 12 行, i, _ := strconv.Atoi(s) 创建了一个新变量i ,作用域限制在 if 语句内 。但是在第 15 行打印的时候,变量 i 则是全局变量的值 。
第3题
package mainimport ("fmt")func hello(num ...int) {num[0] = 18}func main() {i := []int{5, 6, 7}hello(i...)fmt.Println(i[0])}选项
185Compilation error答案
18这一题考查的是可变参数,如果把 slice 传递给可变参数,其作用会施加到调用者 。
第 4 题
package mainimport ("fmt")func main() {a := [2]int{5, 6}b := [2]int{5, 6}if a == b {fmt.Println("equal")} else {fmt.Println("not equal")}}选项
compilation errorequalnot equal答案
equal数组是Go中的值类型,可以进行比较 。如果对应的元素相等,则两个数组值相等 。在我们的例子中,a和b是相等的,因此这个程序打印为相等 。
第 5 题
package mainimport "fmt"type rect struct {len, wid int}func (r rect) area() {fmt.Println(r.len * r.wid)}func main() {r := &rect{len: 5, wid: 6}r.area()}选项
compilation error30答案
30这个程序将正确编译并打印30 。
第 14 行,我们把 rect 的地址分配给了 r 。你可能想知道,当我们在第 15 行没有使用(*r).area()时,为什么这个程序还能工作 。由于area()有一个值接收器,所以Go足够智能,可以将 r.area() 解释为 (*r).area(),因此这个程序可以工作: 。
第 6 题
package mainimport ("fmt")func main() {a := [5]int{1, 2, 3, 4, 5}t := a[3:4:4]fmt.Println(t[0])}选项
34compilation error答案
4表达式
a[low : high : max]构造与简单的片表达式 a[low: high] 相同类型、相同长度和元素的片 。
另外,它通过将结果片设置为 max - low 来控制它的容量 。因此,第 9 行中的切片 t 有一个元素4,容量是1 。
第 7 题
package mainimport ("fmt")type person struct {name string}func main() {var m map[person]intp := person{"mike"}fmt.Println(m[p])}选项
compilation error01答案
0当我们尝试打印在映射中不存在的元素时,将打印该元素的零值 。在我们的例子中,m是 map[person]int 类型的映射 。因为p在映射中不存在,int 的初始值 0 被打印出来 。
第 8 题
package mainimport ("fmt")func main() {i := 65fmt.Println(string(i))}选项
A65compilation error答案
A字母 A 的 unicode值是 65 。所以第 9 行,i 被强制格式化为string类型是,就打印出字母 A 了 。
第 9 题
package mainimport ("fmt")func main() {a := 5b := 8.1fmt.Println(a + b)}选项
13.113compilation error答案
compilation error这个错误很简单,也很明显 。两个变量数据类型不相同,直接运算,编译不通过 。
第 10 题
package mainimport ("fmt")func main() {var i interface{}if i == nil {fmt.Println("nil")return}fmt.Println("not nil")}选项
nilnot nilcompilation error答案
nil空接口的基础值和具体类型都为nil 。因此 i 为 nil 。
第 11 题
package mainimport ("fmt")func hello(i int) {fmt.Println(i)}func main() {i := 5defer hello(i)i = i + 10}选项
515答案
5延迟函数的参数是在执行 defer 语句时求值,而不是在实际函数调用完成时求值 。
因此,当遇到第 12 行中的 defer 语句时, i的值是5 。这个程序会输出5 。
第 12 题
package mainimport ("fmt")func main() {fmt.Printf("%%")}


推荐阅读