golang笔试题编程 (golang面试题及解析)

1、函数只能与nil比较,不能比较两个函数是否相等

// 编译错误
func main() {
  var f1 = func() {}
  var f2 = func() {}
  if f1 == f2 {
    fmt.Println("f1 equal f2")
  }
}

2、map[key]struct中struct是不可寻址的,所以不能直接赋值

// 编译错误
type Student struct {
  Name string
}

func main() {
  m := make(map[int]Student)
  m[0].Name = "张三"
  fmt.Println(m[0].Name)
}

3、 := 操作符不能用于结构体字段赋值

// 编译错误
type Student struct {
  Name string
}

func main() {
  var s Student
  s.Name, tmp := "张三", "李四"
}

4、有方向的chan不可以关闭

// 编译错误
func Close(ch <- chan int) {
  close(ch)
}

5、字符串是只读的

// 编译错误
func main() {
  str := "abcd"
  str[0] = 'x'
  fmt.Println(str)
}

6、 map是不可比较的

// 编译错误
func main() {
  m1 := map[int]string{1:"a"}
  m2 := map[int]string{1:"a"}
  if m1 == m2 {
    fmt.Println("map1 equal map2")
  }
}

7、slice切片是不可比较的

// 编译错误
func main() {
  s1 := []int{1,2}
  s2 := []int{1,2}
  if s1 == s2 {
    fmt.Println("slice1 equal slice2")
  }
}

8、map未分配内存不能赋值

// 编译错误
func main() {
  var m1 map[int]string
  m1[0] = "abc"
}

9、map中的value是不可寻址的

// 编译错误
type Student struct {
  Name string
}

func main() {
  m := map[string]Student{"zhangsan": Student{"张三"}}
  m["zhangsan"].Name = "李四"
  fmt.Println(m["zhangsan"].Name)
}

10、可变函数是指针传递

func Hello(nums ...int) {
  nums[0] = 100
}

func main() {
  nums := []int{1, 2, 3}
  Hello(nums...)
  fmt.Println(nums[0]) // 输出100
}

飞机~~~

golang的range其实很简单

排序算法Golang实现之快速排序

Golang匿名函数与闭包

Golang中defer与return的执行顺序