• 01.变量常量和数据类型


    1. 变量和常量

    变量初始化

    var v1 int = 10
    var v2 = 10
    v3 := 10

    变量赋值

    var v1 int
    v1 = 10
    v2 := 20 
    v1, v2 = v2, v1    //多重赋值
    _, _, name = getName() // 匿名变量

    预定义常量

    const {                // const 关键字将iota初始化为0
        v1 = iota
        v2 = iota         // 1
        v3 = iota         // 2
    }

    const {
    v1 = iota << 1 // 1
    v2 // 2 表达式格式一样可省略
    v3 // 4
    }

    const {
      SUNDAY = iota
    // MONDAY // 枚举类型
    // TUESDAY
    // WEDNESDAY
    // THURSDAY
    // FRIDAY
    // SATURDAY

    }

    2. 数据类型

    2.1 bool

    var v1 bool
    v1 = true
    v2 := (1==2)
    v3 := (1!=0)

    2.2 int

    var v1 int32
    v2 := 10      // v2自动推导为int64类型
    v1 = int32(v2)    // 赋值给v1前要强制类型转换,否则会报错

    两个不同类型整数不能直接做比较,但是可以与字符常量做比较

    var v1 int32 = 10
        v2 := 10
        var v3 bool = (int(v1) > v2)
      v4 := v1 > 20 fmt.Print(v1, v2, v3, v4)

    位运算

    a := 124 << 2         // 496   左移2位
    b := 124 >> 2         // 31
    c := 124 ^ 2           // 异或
    d := 124 & 2           //
    e := 124 | 2            // 126
    g := ^3                  // 取反

    2.2 字符串

        var c string
        c = "hello 中国"
        n := len(c)
    
        for i := 0; i < n; i++ {
            ch := c[i]     // ch类型位byte
            fmt.Println(i, ch)
        }
    
        for i, ch := range c {        // ch类型位unicode
            fmt.Println(i, ch, string(ch)
        }

    2.3 数组

    var myarr [5]int     // 声明数组
    myarr = [5]int{1,2,3,4,5}  //数组赋值
    
    var arr1  [2*N] struct{x, y int32}   // 复杂类型数组
    var arr2  [2][3]int  二维整形数组, 2行5列
    var arr3  [2][2][2]float32

    遍历元素

    arr1 := [5]int{1,2,3,4,5}
    for i := 0; i < len(arr1); i++ {
        fmt.Printf(arr1[i])     
    }
    
    
    for index, value := range(arr1){
        fmt.Println(index, value)    
    }

    值类型

    数组是值类型,所有的值类型在赋值或者传递给函数时都会发生一次复制。

    package main
    
    import "fmt"
    
    func modify(array [5]int)  {
        array[0] = 10
    }
    
    func main()  {
        arr1 := [5]int{1,2,3,4,5}
        modify(arr1)    // 不会改变数组的值
        fmt.Print(arr1)
    }

    2.4 数组切片

    基于数组创建切片

    func main()  {
        var arr1 = [5]int{1,2,3,4,5}
        var myslice []int = arr1[:5]
        fmt.Println(myslice)
    }

    利用make函数创建切片

    package main
    
    import "fmt"
    
    func main()  {
        var slice1 = make([]int, 5)
        var slice2 = make([]int, 5, 10)
        slice3 := []int{1,2,3,4,5}
    
        fmt.Println(slice1, slice2, slice3)
      // len(slice2) 5 显示元素个数
      // cap(slice2) 10 显示空间大小 }

    向数组切片中添加元素

    var slice1 = []int
    var slice2 = []int{1,2,3}
    
    slice1 = append(slice1, 1, 2, 3)  // 添加元素
    slice1 = append(slice1, slice2...)     //向数组切片中添加数组切片,...是一个语法糖

    内容复制

    sli1 := []int{1,2,3}
    sli2 := []int{4,5,6,7,8,9}
    copy(sli1, sli2)   //将sli2中的元素复制到sli1中

    2.5 map数据类型

    package main
    
    import "fmt"
    
    type PersonInfo struct {
        ID string
        Name string
        Address string
    }
    
    func main()  {
        var persons map[string] PersonInfo
    
        persons = make(map[string] PersonInfo)
    
        persons["zj"] = PersonInfo{"01","zj","209"}
    
        val, ok := persons["zj"]
        if ok {
            fmt.Println(ok, val)
        }
    }
  • 相关阅读:
    OnFileOpen与OnOpenDocument(转)
    Wpf应用程序进入全屏和退出全屏
    在WPF中使用Emgu加载Image<,>图像的两种方法
    C#中ListBox控件重绘Item项
    sdut2404 Super Prime ACM算法设计
    真彩色制式下IplImage转成CBitmap格式
    【转】中缀表达式转换为后缀表达式
    MFC中CImage的简单复制方法 (Copy CImage)
    齐鲁软件大赛尖峰时刻团队
    Priest John's Busiest Day HDU2491 ACM算法设计
  • 原文地址:https://www.cnblogs.com/zhangjian0092/p/12356115.html
Copyright © 2020-2023  润新知