七叶笔记 » golang编程 » 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
}  

飞机~~~

相关文章