go语法

语言: CN / TW / HK
  1. 基本类型

    • bool

      优先级:&& > || * > +

      布尔型不可强制转为整型,也不可以转为其他类型

    • string

    • int int8 int16 int32 int64

      Int8(-128 - 127). uint8(0 - 255)

      通常 int 类型的处理速度也是最快的

      0x%x 十六进制, %d 十进制,

    • uint8 16 32 64 uintptr

      uintptr无符号整数类型,没有指定具体的 bit 大小但是足以容纳指针,uintptr 类型只有在底层编程时才需要,特别是Go语言和C语言函数库或操作系统接口相交互的地方

      程序逻辑对整型范围没有特殊要求,但是 在二进制传输、读写文件的结构描述时,为了保持文件的结构不会受到不同编译目标平台字节长度的影响,不要使用 int 和 uint

    • byte // uint8的别名

    • rune //int32的别名 代表一个unicode码

  • float32 float64

    fmt.Printf("%f\n", math.Pi). fmt.Printf("%.2f", math.Pi)

    • complex64(32位实数和虚数) complex128

      complex128 为复数的默认类型, name := complex(x, y) x为实部,y为虚部

      real(z)获取实部 imag(z) 获取虚部

  1. 申明 标准格式 批量格式 简短格式

    := 声明时左值变量必须是没有定义的变量

    var conn net.Conn
    var err error
    conn, err = net.Dial("tcp", "127.0.0.1:8080")
    // 在多个短变量声明和赋值中,至少有一个新声明的变量出现在左值中,即便其他变量名重复声明的,编译器也不会报错
    conn, err = net.Dial("tcp", "127.0.0.1:8080")
    conn2, err = net.Dial("tcp", "127.0.0.1:8080")
  2. 匿名变量

    不占用内存空间,也不会分配内存,匿名变量与匿名变量之间也不会因为多次声明而无法使用。

    func getData() (int, int) {
      return 1, 2
    }
    func main() {
      a, _ := getData()
      _, b := getData()
      fmt.Println(a, b) // 1,2
    }
  3. 变量的作用域

    • 局部变量

      局部变量名和全局变量名可以相同,局部变量名优先级更高

    • 全局变量

      全局变量声明必须以var关键字开头,如果想要在外部包中使用全局变量的首字母必须大写

    • 形式参数

      只在函数调用时生效,调用结束时销毁,未被调用时,行参不占用实际的存储单元,也没有实际值

  4. go语言指针

    go具有控制数据结构指针的能力,但是却不能进行指针运算。

    指针在golang中可以分为两个核心概念:

    • 类型指针:可以对这个指针类型的数据进行数据,也可以使用指针传递数据,而无需拷贝数据,但不能进行偏移和运算。
    • 切片,由指向起始元素的原始指针、元素数量和容量组成

    对比C语言的指针,指针是其保持高性能的根本所在,在操作大数据块时方便快捷,故此是操作系统使用的是C及其指针特性编写。

    使用new()关键字也可以创建指针,创建过程会分配内存,被创建的指针指向默认值。

  5. go语言变量的生命周期

    堆:存放进程执行中被动态分配的内存段,大小不固定

    栈:也即堆栈,用来存放程序暂时创建的局部变量,如函数大括号内的变量。

  6. go常量

    const (
      a = .12 
      b = 123   ) // 声明多个常量

    iota常量生成器

    type weekday int
    const (
     sunday weekday = iota
      monday // 1
    )

    无类型常量

    var x float32 = math.Pi
    // math.Pi 无类型的浮点数常量,可以直接用于任意需要浮点数或复数的地方
  7. 类型别名

    // 类型别名和类型定义
    type IntAlias = int // 给int取IntAlias的别名
    type newInt int // 声明newInt为int类型

    非本地类型不能定义方法

    在结构体成员嵌入时使用别名

分享到: