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)
}
答案及解析
-
参考答案及解析: 不能通过编译,
new([]int)
之后的list
是一个*[]int
类型的指针,不能对指针执行append
操作. 可以使用make()
初始化之后使用. 同样的,map
和channel
建议使用make()
或者字面量的方式初始, 不要用new()
-
参考答案及解析: 不能通过编译.
append()
的第二个参数不能直接使用slice
, 需要使用...
操作符,将一个切片追加到另一个切片上append(s1, s2...)
. 或者直接跟上元素, 形如:append(s1, 1,2,3)
-
参考答案及解析: 不能通过编译. 这道题的主要知识点是变量声明的简短模式, 形如:
x := 100
. 这种声明方式有限制:
必须使用显示初始化; 不能提供数据类型,编译器会自动推导; 只能在函数内部使用简短模式;
「真诚赞赏,手留余香」
真诚赞赏,手留余香
使用微信扫描二维码完成支付