16

go语法

 4 years ago
source link: https://studygolang.com/articles/27211
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client
  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类型

    非本地类型不能定义方法

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


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK