第二章 语法概览

发布时间 2023-07-13 23:50:42作者: CodeWater

第二章就是大概讲了一下Go语法的东西,标识符、操作符、类型、流程控制、函数等等。

  1. 任何类型都是实现了空接口
  2. 空标识符用来接收不需要用到的变量
  3. 相比较别的语言,go天生支持高并发,在操作符里面也多了一个跟并发有关的,接收操作:<-
  4. 类型断言:判断一个接口值得实际类型是否为某个实际类型,或者是否实现了某个接口类型。如:v1.(I1) v1 表示一个接口值,I1表示一个接口类型
    • 如果v1是一个非接口值,那么必须在做类型断言之前把它转换成接口值。因为G0中的任何类型都是空接口类型的实现类型,所以一般会这样做:interface{}(v1).(I1)
    • 如果类型断言的结果为否,就意味着该类型断言是失败的。失败的类型断言会引发一个运行时恐慌panic(或称运行时异常),解决方法是:var i1,ok = interface{}(v1).(I1)这里声明并赋值了两个变量,其中ok是布尔类型的变量,它的值体现了类型断言的成败。如果成功,i1就会是经过类型转换后的I1类型的值,否则它将会是I1类型的零值(或称默认值)。
  5. Go有很多预定义类型,这里简单地把它们分为基本类型和高级类型。其中稍微注意下byterune类型,实际就是int8int32

    当然了,int的类型其实会根据cpu的架构而有所不同,这个可以查看官方资料。

  6. 只有基本类型及其别名类型才可以作为常量的类型。注意,G0官方的命名规范中指出常量的命名要用驼峰法。但是,书的作者认为常量的命名应该使用大小写一致的单词,且多个单词时用下划线进行分割。
    (这个我觉得就看具体的公司规范吧;个人开发的话那就更无所谓了)
  7. 数组:数组长度和类型只要有一个不一样就是不同的数组,长度一旦声明就无法改变。
    [...]uint8{192,168,0,1}方括号中的特殊标记...表示需由G0编译器计算该值的元素数量并以此获得其长度。
  8. 切片:与数组不同,切片的类型字面量(如[]string)并不携带长度信息。切片的长度是可变的,且并不是类型的一部分;只要元素类型相同,两个切片的类型就是相同的。此外,一个切片类型的零值总是nil,此零值的长度和容量都为0。