Go面试题4

Posted by     "" on Wednesday, December 11, 2019

Go面试题4

1: 下面这段代码能否通过编译, 不能的话原因是什么; 如果能,输出什么.

package main

import "fmt"
func main() {
    list := new([]int)
    list = append(list,1)
    fmt.Println(list)
}

2: 下面这段代码能否通过编译, 如果可以, 输出什么?

package main

import "fmt"
func main() {
    s1 := []int{1,2,3}
    s2 := []int{4,5}
    s1 = append(s1, s2)
    fmt.Println(s1)
}

3: 下面这段代码能通过编译, 如果可以, 输出什么?


package main

import "fmt"
var (
    size := 1024
    max_size = size * 2
)

func main() {
    fmt.Println(size, max_size)
}

答案及解析

  1. 参考答案及解析: 不能通过编译, new([]int) 之后的list 是一个*[]int类型的指针,不能对指针执行append操作. 可以使用make()初始化之后使用. 同样的, mapchannel 建议使用make()或者字面量的方式初始, 不要用new()

  2. 参考答案及解析: 不能通过编译. append()的第二个参数不能直接使用slice, 需要使用...操作符,将一个切片追加到另一个切片上 append(s1, s2...). 或者直接跟上元素, 形如: append(s1, 1,2,3)

  3. 参考答案及解析: 不能通过编译. 这道题的主要知识点是变量声明的简短模式, 形如: x := 100. 这种声明方式有限制:

必须使用显示初始化; 不能提供数据类型,编译器会自动推导; 只能在函数内部使用简短模式;

「真诚赞赏,手留余香」

Richie Time

真诚赞赏,手留余香

使用微信扫描二维码完成支付