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)
    }
}

 

posted @ 2020-02-24 11:20  眼镜儿  阅读(194)  评论(0编辑  收藏  举报