例子1: x = 123, return 321
例子2: x = -123, return -321
输入的整数要求是一个 32bit 有符号数,如果反转后溢出,则输出 0
1 2 3 4 5 6 7 8 9 10 11
func reverse(x int) (num int) { for x != 0 { num = num*10 + x%10 x = x / 10 } // 使用 math 包中定义好的最大最小值 if num > math.MaxInt32 || num < math.MinInt32 { return 0 } return }
res := make([]Interval, 0) swap := Interval{} for k, v := range intervals { if k == 0 { swap = v continue } if v.Start <= swap.End { swap.End = v.End } else { res = append(res, swap) swap = v } } res = append(res, swap) return res }
37.输出什么?
1 2 3 4 5 6 7 8 9
package main
import ( "fmt" )
func main() { fmt.Println(len("你好bj!")) }
考点:编码长度
输出9
38.编译并运行如下代码会发生什么?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
package main
import "fmt"
type Test struct { Name string }
var list map[string]Test
func main() {
list = make(map[string]Test) name := Test{"xiaoming"} list["name"] = name list["name"].Name = "Hello" fmt.Println(list["name"]) }
考点:map
编程报错cannot assign to struct field list["name"].Name in map。
因为list[“name”]不是一个普通的指针值,map的value本身是不可寻址的,因为map中的值会在内存中移动,并且旧的指针地址在map改变时会变得无效。
定义的是var list map[string]Test,注意哦Test不是指针,而且map我们都知道是可以自动扩容的,那么原来的存储name的Test可能在地址A,但是如果map扩容了地址A就不是原来的Test了,所以go就不允许我们写数据。你改为var list map[string]*Test试试看。
39.ABCD中哪一行存在错误?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
type S struct { }
funcf(x interface{}) { }
funcg(x *interface{}) { }
funcmain() { s := S{} p := &s f(s) //A g(s) //B f(p) //C g(p) //D