GO常见错误编程总结:第二篇

一。GO是强类型语言,不同类型之间不能直接做运算

func main(){
  a:=9
  b:=1.3
  fmt.println(a==b) //编译报错
  fmt.println(a+b) //编译报错
}
  • 考察知识点
    1. go是强类型语言

二。cap和len函数适用的类型

 func main() {
    a := []int{1}  //第一种定义切片类型
    b := make([]int, 1, 1) //第二种定义切片类型
    c := make(chan int) //第一种定义channel类型
    var d chan int //第二种定义channel类型
    e := make(chan int, 1) //第三种定义channel类型
    f := [1]int{1} //第一种定义数组类型
    var g [1]int //第二种定义数组类型
    fmt.Println("a:", len(a), cap(a)) // a: 1 1
    fmt.Println("b:", len(b), cap(b)) //b: 1 1
    fmt.Println("c:", len(c), cap(c)) //c: 0 0
    fmt.Println("d:", len(d), cap(d))//d: 0 0
    fmt.Println("e:", len(e), cap(e))//e: 0 1
    fmt.Println("f:", len(f), cap(f)) //f: 1 1
    fmt.Println("g:", len(g), cap(g))//g:1 1
}
  • 考察知识点
    1. len和cap函数适用类型为:切片/数组/channel

三。string修改问题

func main(){
  a := "abcd"
  a[0] = 'x'  //编译报错  
  fmt.println(a)
}
  • 考察知识点
    1.string 可以为空(也就是长度为0),但是不会为nil
    2.string 对象不可以修改,但是可以重新赋值
    3 . 主要原因:string对象只能获取到头指针地址,也就是 &a;无法获取到其他下标的地址,也就是&a[0]是编译错误的,根据runtime源码,string对象只保存了首地址和长度信息,所以无法通过下标的方式修改和获取值。
  • 如果要修改可以通过一下方式
func main() {
    var a string = "hello"
    b := []byte(a)
    b[0]='x'
    a = string(b)
    fmt.Println(a)
}

持续更新中... ...

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容