Go 中文网、思否、博客园等平台,内容主要以问答形式记录。如果回答中有错误,欢迎大家指出,共同学习、共同进步。
Go每日一题_051
下面这段代码输出什么? func main() { i := -5 j := +5 fmt.Printf("%+d %+d", i, j) } A. -5 +5 B. +5 +5 C. 0 0 🔑 答案解析: A %d表示输出十进制数字,+表示输出数值的符号。这里不表示取反。 %d 输出 正数不会输出符号 +
Go 中文网、思否、博客园等平台,内容主要以问答形式记录。如果回答中有错误,欢迎大家指出,共同学习、共同进步。
下面这段代码输出什么? func main() { i := -5 j := +5 fmt.Printf("%+d %+d", i, j) } A. -5 +5 B. +5 +5 C. 0 0 🔑 答案解析: A %d表示输出十进制数字,+表示输出数值的符号。这里不表示取反。 %d 输出 正数不会输出符号 +
下面这段代码输出什么? func main() { s := make(map[string]int) delete(s, "h") fmt.Println(s["h"]) } A. runtime panic B. 0 C. compilation error 🔑 答案解析: B 0 delete 一个不存在的key并不会panic 输出一个不存在的key会输出类型的零值 扩展 func main() { var s map[string]int delete(s, "h") s["h"] = 1 fmt.Println(s["h"]) } delete nil map 程序也不会panic 但是往nil map 写数据会panic
下面这段代码输出什么? func main() { var i interface{} if i == nil { fmt.Println("nil") return } fmt.Println("not nil") } A. nil B. not nil C. compilation error 🔑 答案解析: A 接口类型 当动态值和动态类型都为 nil 时,接口类型值才为 nil。
以下哪种类型可以使用 cap() 函数? A. array B. slice C. map D. channel 🔑 答案解析: ABD 数组 切片 管道
下面这段代码输出什么? func main() { a := [2]int{5, 6} b := [3]int{5, 6} if a == b { fmt.Println("equal") } else { fmt.Println("not equal") } } A. compilation error B. equal C. not equal 🔑 答案解析: A 只有同容量,同类型的数组才能比较
下面这段代码输出什么? package main import ( "fmt" ) func main() { a := [5]int{1, 2, 3, 4, 5} t := a[3:4:4] fmt.Println(t[0]) } A.3 B.4 C.compilation error 🔑 答案解析: 答B 解析 t := a[3:4:4] 基于a切片生成一个新切片t ,该t的起始指向a[3]的位置,到a[4]停止
以下代码能否通过编译? package main import ( "fmt" ) type worker interface { work() } type person struct { name string worker } func main() { var w worker = person{} fmt.Println(w) } A: 能;B: 不能;C: 不知道 🔑 答案解析: A Go结构体中是可以嵌套接口类型的 嵌入接口有实际用途。 例:标准库中 sort 包中,有一个接口:Interface type Interface interface { // Len is the number of elements in the collection. Len() int // Less reports whether the element with // index i should sort before the element with index j. Less(i, j int) bool // Swap swaps the elements with indexes i and j. Swap(i, j int) } type reverse struct { // This embedded Interface permits Reverse to use the methods of // another Interface implementation. Interface } 它就内嵌了一个 Interface,用于排序的反转。 ...
以下代码有什么问题,怎么解决? total, sum := 0, 0 for i := 1; i <= 10; i++ { sum += i go func() { total += i }() } fmt.Printf("total:%d sum %d", total, sum) 🔑 答案解析: sum 的值 55 total 的值 55 - 100 之前 考点一: 知道输出的效果是什么,且知道如何解决。 考点二: data race。因为存在多 goroutine 同时写 total 变量的问题,所以有数据竞争。 考点三: main 函数先退出了,开启的 goroutine 根本没有机会执行。
以下代码输出什么? package main import ( "encoding/json" "fmt" ) type AutoGenerated struct { Age int `json:"age"` Name string `json:"name"` Child []int `json:"child"` } func main() { jsonStr1 := `{"age": 14,"name": "potter", "child":[1,2,3]}` a := AutoGenerated{} json.Unmarshal([]byte(jsonStr1), &a) aa := a.Child fmt.Println(aa) jsonStr2 := `{"age": 12,"name": "potter", "child":[3,4,5,7,8,9]}` json.Unmarshal([]byte(jsonStr2), &a) fmt.Println(aa) } A:[1 2 3] [1 2 3] B:[1 2 3] [3 4 5] C:[1 2 3] [3 4 5 6 7 8 9] D:[1 2 3] [3 4 5 0 0 0] 🔑 答案解析: 答: B 解析: Json反序列化时,切片的处理方式是将切片的len值改为0后append数据。 因为 aa := a.Child aa 和 a.Child 切片指向同一个数组,append 到6时,因为a.Child未扩容,所以修改底层数组等同于修改aa的数据。但是在append到7时,a.Child 切片发生了切片扩容指向了新的数组。 因此aa的数据为 [3 4 5]
下面这段代码输出什么? func main() { a := 5 b := 8.1 fmt.Println(a + b) } A.13.1 B.13 C.compilation error 🔑 答案解析: 参考答案及解析:C。a 的类型是 int,b 的类型是 float,两个不同类型的数值不能相加,编译报错。