美文网首页
Golang入门三:类型

Golang入门三:类型

作者: 馒头_8bb4 | 来源:发表于2021-03-24 10:18 被阅读0次

    基础类型

    • 布尔类型:bool
    • 整形:int8、byte、int16、int、uint、uintptr等
    • 浮点类型:float32、float64
    • 复数类型: complex64、 complex128。
    • 字符串: string。
    • 字符类型: rune。
    • 错误类型: error。
      此外, Go语言也支持以下这些复合类型:
    • 指针( pointer)
    • 数组( array)
    • 切片( slice)
    • 字典( map)
    • 通道( chan)
    • 结构体( struct)
    • 接口( interface)

    布尔

    var b1 bool
    b1 = true
    b2 := (1 == 2)
    

    整型

    var value int32
    value1 := 64 // 自动推导为int类型
    value = value1 // 会编译错误,类型不一致
    value= int32(value1) // 强制类型转换
    
    数值运算

    常规整数运算:+、 -、 *、 /和%,%为取余

    比较运算

    比较运算符:>、<、==、>=、<=和!=

    位运算

    位运算符:<<、>>、^、&、|

    运算 含义 样例
    x << y 左移 124 << 2 // 结果为496
    x >> y 右移 124 >> 2 // 结果为31
    x ^ y 异或 124 ^ 2 // 结果为126
    x & y 124 & 2 // 结果为0
    x | y 124 | 2 // 结果为126
    ^x 取反 ^2 // 结果为-3

    浮点型

    var f1 float32
    f1 = 12
    f2 := 13.0 // 不加小数点,默认推导为整型而不是浮点型
    f1 = float32(f2) // 强制转换
    
    // 浮点数比较
    import "math"
    
    // p为用户自定义的比较精度,如0.0001
    func IsEqual(f1, f2, p float64) bool {
        return math.Fdim(f1, f2) < p
    }
    

    复数类型

    var v complex64 // 由两个float32构成的复数类型
    v = 3.2 + 12i
    v2 := 3.2 + 12i
    v3 := complex(3.2, 12)
    

    字符串

    var str string              // 声明一个字符串变量
    str = "Hello nnnuo"         // 字符串赋值
    ch : = str[0]               // 取字符串的第一个字符
    
    // 以字节数组遍历
    n := len(str)
    for i := 0; i < n; i++ {
        c := str[i]
        fmt.Println(i, c)
    }
    // 以Unicode字符遍历
    for i, c := range str {
        fmt.Println(i, c) // c的类型为rune
    }
    

    数组

    常规数组声明方法:

    [32]byte                    // 长度为32的数组,每个元素为一个字节
    [2*N] struct { x, y int32 } // 复杂类型数组
    [1000]*float64              // 指针数组
    [3][5]int                   // 二维数组
    [2][2][2]float64            // 等同于[2]([2]([2]float64))
    // 获取长度
    arrLength := len(arr)
    

    切片

    创建切片
    package main
    
    import "fmt"
    
    func main() {
        // 定义数组
        var myArray [10] int = [10] int {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
        // 基于数组创建一个数组切片
        var mySlice [] int = myArray[:5]
        // 使用mack创建
        mySlice1 := make([]int, 5) // 初始元素个数为5,元素初始值为0
        mySlice2 := make([]int, 5, 10) // 初始元素个数为5,元素初始值为0,并预留10个元素存储空间
        fmt.Println("len(mySlice2 ): ", len(mySlice2)) // len(mySlice2 ): 5
        fmt.Println("cap(mySlice2): ", cap(mySlice2)) // cap(mySlice2): 10
        mySlice3 := []int{1, 2, 3, 4, 5} // 创建并初始化包含5个元素的切片
    
        fmt.Println("Elements of myArray: ")
        for _, v := range myArray {
            fmt.Print(v, " ")
        }
        fmt.Println("\nElements of mySlice: ")
        // 遍历
        for _, v := range mySlice {
            fmt.Print(v, " ")
        }
        fmt.Println()
    
        mySlice = append(mySlice, 1, 2, 3)
        mySlice = append(mySlice, mySlice3...)
    
        // 基于切片创建切片
        oldSlice := []int{1, 2, 3, 4, 5}
        newSlice := oldSlice[:3]
    
        // Copy
        copySlice1 := []int{1, 2, 3, 4, 5}
        copySlice2 := []int{5, 4, 3}
        copy(copySlice2, copySlice1) // 只会复制copySlice1的前3个元素到copySlice2中
        copy(copySlice1, copySlice2) // 只会复制copySlice2的前3个元素到copySlice2的前3个位置
    }
    

    运行结果为:
    Elements of myArray:
    1 2 3 4 5 6 7 8 9 10
    Elements of mySlice:
    1 2 3 4 5

    map

    package main
    import "fmt"
    
    type PersonInfo struct {
        ID string
        Name string
        Address string
    }
    
    func main() {
        // map变量声明:var map_name map[key_type] value_type
        var personDB map[string] PersonInfo
        // 创建,key类型为string,值为PersonInfo
        personDB = make(map[string] PersonInfo)
        /*
            personDB = make(map[string] PersonInfo, 100) // 初始存储能力为100
            // 创建并初始化
            personDB = map[string] PersonInfo {
                "1234": PersonInfo{"1234", "Nnnuo", "Room 1204..."}
            }
        */
    
        // 往map里面插入数据
        personDB["12345"] = PersonInfo{"12345", "Nnnuo", "Room 111..."}
        personDB["1"] = PersonINfo{"1", "JJAA", "Room 302..."}
    
        // 从map查询键为"12345"的信息
        person, ok := personDB["12345"]
        if ok {
            fmt.Println("Found person", person.Name, "with ID 12345.")
        } else {
            fmt.Println("Did not find person with ID 12345.")
        }
    
        // 删除
        delete(personDB, "1234")
    }
    

    相关文章

      网友评论

          本文标题:Golang入门三:类型

          本文链接:https://www.haomeiwen.com/subject/andfhltx.html