zoukankan      html  css  js  c++  java
  • go_base_01_var_const_变量和常量

    go_base_01_var_const_变量和常量

    1.编程基础概念

    1.1.标识符

    • 程序员定义的具有特殊意义的词,比如变量名、常量名、函数名等等,用于存储数据(内存空间)
    • Go语言中标识符由字母数字和_(下划线)组成,并且只能以字母和_开头。例如:abc, _, _123, a123

    1.2.关键字

    • 指编程语言中预先定义好的具有特殊含义的标识符

    • 关键字和保留字都不建议用作变量名

    • Go语言中有25个关键字:

    break        default      func         interface    select
    case         defer        go           map          struct
    chan         else         goto         package      switch
    const        fallthrough  if           range        type
    continue     for          import       return       var
    
    • Go语言中有37个保留字
    Constants:  true  false  iota  nil
    Types:      int  int8  int16  int32  int64  
                uint  uint8  uint16  uint32  uint64  uintptr
                float32  float64  complex64  complex128
                bool  byte  rune  string  error
    Functions:  make  len  cap  new  append  copy  close  delete
                complex  real  imag
                panic  recover
    

    2.变量

    • 英文 Variable
    • 变量的功能是存储数据(数据的内存地址)

    2.1.变量的引入

    • 程序运行过程中的数据都是保存在内存中,然后返回给我们内存地址,
    • 我们想要在代码中操作某个数据时就需要去内存上找到这个内存地址
    • 但是如果我们直接在代码中通过内存地址去操作数据的话,代码的可读性会非常差而且还容易出错
    • 所以我们就利用变量将这个数据的内存地址保存起来,以后直接通过这个变量就能找到内存上对应的数据了

    2.2.变量的类型

    • 1.Go语言中的每一个变量都有自己的类型
    • 2.不同的变量保存的数据类型可能会不一样
    • 3.常见变量的数据类型有:整型、浮点型、布尔型等

    2.3.变量声明

    • 1.Go语言中的变量必须经过声明才能开始使用,
    • 2.声明变量时如果没有赋值,go 编译器会使用推导出的变量类型默认值进行初始化,占据内存空间
    • 3.同一作用域内同一变量不支持重复声明,可以重复赋值
    • 4.Go语言的变量声明后必须使用

    2.3.1.标准声明

    • 变量声明以关键字 var 开头,变量类型放在变量的后面,行尾无需分号。
    # 格式
    var 变量名 变量类型
    
    # 实例演示
    var name string
    var age int
    var isOk bool
    

    2.3.2.批量声明

    • 每声明一个变量就需要写var关键字会比较繁琐,go 语言中还支持批量变量声明
    var (
        a string
        b int
        c bool
        d float32
    )
    

    2.3.3.变量的初始化-赋值

    • Go 语言在声明变量的时候,会自动对变量对应的内存区域进行初始化赋值操作,每个变量会被初始化成其相应类型的默认值
    • 字符串变量的默认值为 空字符串
    • 整型和浮点型变量的默认值为 0
    • 布尔型变量默认为 false
    • 切片、函数、指针变量的默认为 nil
    # 单个变量声明加初始化
    var name string = "zhangsan"
    var age int = 18
    
    # 多个变量同时初始化
    var name, age = "zhangsan", 18
    

    2.3.4.变量的类型推导

    • GO 语言中声明变量时可以将变量的类型省略,编译器会根据等号右边的值来推导变量的类型完成初始化
    var name = "zhangsan"
    var age = 18
    

    2.3.5.短变量声明

    • 在函数内部,可以使用更简略的 := 方式声明并初始化变量
    package main
    
    import (
      "fmt"
    )
    // 全局变量m
    var m = 100
    
    func main() {
      m := 200 // 此处声明局部变量m
      n := 10
      fmt.Println(m, n)
    }
    

    2.3.6.匿名变量

    • 在使用多重赋值时,如果想要忽略某个值,可以使用匿名变量 anonymous variable
    • 匿名变量用一个 下划线 _ 表示
    • 匿名变量不占用命名空间,不会分配内存,所以匿名变量可以重复声明
    • 在Lua等编程语言里,匿名变量也被叫做哑元变量
    func foo() (int, string) {
      return 10, "Q1mi"
    }
    func main() {
      x, _ := foo()
      _, y := foo()
      fmt.Println("x=", x)
      fmt.Println("y=", y)
    }
    

    2.4.注意

    • := 不能使用在函数外
    • 函数外的每个语句都必须以关键字开始(var、const、func等),所以变量赋值只能在函数内部执行
    • 匿名变量 _ 多用于占位,表示忽略值,类似 shell 的 null 黑洞

    3.常量

    • 相对于变量,常量是恒定不变的值,多用于定义程序运行期间不会改变的那些值
    • 常量的声明和变量声明非常类似,只是把 var 换成了 const
    • 常量在定义的时候必须赋值

    3.1.常量的声明

    • 作用域:可以是全局或者局部
    # 标准声明
    const pi = 3.1415
    const e = 2.7182
    
    # 批量声明
    const (
        pi = 3.1415
        e = 2.7182
    )
    
    • const同时声明多个常量时,如果省略了值则表示和上面一行的值相同
    const (
        n1 = 100    // n1 = 100
        n2          // n2 = 100
        n3          // n3 = 100
    )
    

    3.2.iota 常量计数器

    3.2.1.iota 特点

    • iota 是 go 语言的常量计数器,只能在常量的表达式中使用
    • const 关键字出现时 iota 将被重置为 0
    • const 中常量声明每增加一行将使 iota 计数增加一次,所以 iota 可理解为 const 语句块中的行索引
    • 使用 iota 能简化定义,在定义枚举时很有用

    3.2.2.iota 实例演示

    • 一般实例
    const (
        n1 = iota //0
        n2        //1
        n3        //2
        n4        //3
      )
    
    • 使用下划线 _ 跳过某些值
    const (
        n1 = iota //0
        n2        //1
        _
        n4        //3
      )
    
    • iota 声明中间插队计数
    const (
        n1 = iota //0
        n2 = 100  //100
        n3 = iota //2
        n4        //3
      )
    const n5 = iota //0
    
    • 定义数量级
    # 这里的 << 是 go 语言中的位移运算,表示左移操作
    # 1<<10 表示将 1 的二进制表示 1 向左移 10 位,也就是由二进制的 1 变成了二进制的 10000000000 ,也就是十进制的 1024 
    # 同理 2<<2 表示将 2 的二进制表示 10 向左移 2 位,也就是由二进制的 10 变成了二进制的 1000,也就是十进制的 8
    const (
        _  = iota
        KB = 1 << (10 * iota)
        MB = 1 << (10 * iota)
        GB = 1 << (10 * iota)
        TB = 1 << (10 * iota)
        PB = 1 << (10 * iota)
      )
    
    • 多个 iota 定义在一行
    const (
        a, b = iota + 1, iota + 2 //1,2
        c, d                      //2,3
        e, f                      //3,4
      )
    
    本文版权归作者和博客园共有,如需转载请在文章页面给出原文链接,否则保留追究法律责任的权利。
  • 相关阅读:
    Java关键字——instanceof
    C#基础知识整理 IList接口——非泛型
    .Net 中HashTable,HashMap 和 Dictionary<key,value> 和List<T>和DataTable的比较
    JS 判断是否为null
    java数组与字符串相互转换、整型与字符串相互转换
    数组元素的反转
    IOS系统中点击失效
    vue中计算属性和方法的区别,演示代码
    VUE中使用的插件有哪些?为什么,不能自动补全,script,methods和export default?
    【VueJS】实例中data属性的三种写法及区别
  • 原文地址:https://www.cnblogs.com/tssc/p/14825377.html
Copyright © 2011-2022 走看看