Skip to content

基础语法

变量定义

  • : 只能在函数内使用
    • a, b, c, d := true, false, 3, "hello", "world"

内建变量类型

  • bool、string
  • (u)int, (u)int8, (u)int16, (u)int32, (u)int64, uintptr
    • 整数前面加u就是无符号类型
    • uintptr 指针(长度也会根据操作系统的位数变化)
    • go语言没有long
  • byte、rune
    • rune go中的字符型,长度为32,go中没有 char
  • float32、float64、complex64、complex128
    • 浮点型
    • complex64complex128 复数

常量与枚举

func enums() {
    // 枚举定义
    const (
        b = 1 << (10 * iota)
        kb
        mb
        gb
        tb
        pb
    )
    println(b, kb, mb, gb, tb, pb)
    // 1 1024 1048576 1073741824 1099511627776 1125899906842624
}

条件语句

func main() {
    const filename = "abc.txt"
    contents, err := ioutil.ReadFile(filename)
    if err != nil {
        fmt.Println(err)
    } else {
        fmt.Printf("%s\n", contents)
    }
}
func grade(score int) string {
    g := ""
    switch {
    case score < 0 || score > 100:
        panic(fmt.Sprintf("Wrong score: %d", score))
    case score < 60:
        g = "F"
    case score < 80:
        g = "C"
    case score < 90:
        g = "B"
    case score <= 100:
        g = "A"
    }
    return g
}
func main() {
    fmt.Println(grade(0))
    fmt.Println(grade(95))
    fmt.Println(grade(100))
    /*
    F
    A
    A
    */
}

指针

var a int = 2
var pa *int = &a
*pa = 3
fmt.PrintLn(a)

// 3
  • Go中指针不能运算
  • Go语言只有值传递一种方式
    • 值传递与引用传递
      • 值传递
        • 对原本的值做了一份拷贝,拷贝之后不会改变原本的值
      • 引用传递
        • 不会对原本的值做拷贝,当改动之后也会跟着变化
    • Go语言利用值传递时将变量a &(地址) 传递给变量b *(指针),实现a b变量都指向同一个地址,由此实现引用传递。
  • 范例:将两个变量的值进行交换
    package main
    
    import (
        "fmt"
    )
    
    // 交换两个变量的值
    func swap(a, b *int) {
        *b, *a = *a, *b
    }
    
    func main() {
        a, b := 1, 2
        fmt.Println(a, b)
        swap(&a, &b)
        fmt.Println(a, b)
    }
    
    
    // 输出
    1 2
    2 1
    

Go语言的自定义类型,我们在定义的时候就要考虑它是当做一个指针来用还是值来用。