• 01go变量和常量


    1、变量

    变量是为存储特定类型的值而提供给内存位置的名称。在go中声明变量有多种语法。

    所以变量的本质就是一小块内存,用于存储数据,在程序运行过程中数值可以改变。

    Go 语言 变量 、常量命名规则
    1.Go 语言变量名由字母、数字、下划线组成,其中首个字符不能为数字。
    2.Go 语言中关键字和保留字都不能用作变量名。
    3.变量的名字是区分大小写
    4.标识符(变量名称)一定要见名思意 :变量名称建议用名词,方法名称建议用动词
    5.变量命名一般采用驼峰式,当遇到特有名词(缩写或简称,如 DNS)的时候,特有名词
    根据是否私有全部大写或小写。
    

    Go 语言中的变量需要声明后才能使用,同一作用域内不支持重复声明。 并且 Go 语言的变
    量声明后必须使用。

    1.1 变量声明

    //方式一 :var 变量名称 type
    var name string
    var age int
    var isOk bool
    
    //赋值
    name = "kaka"
    age = 20
    
    //方式二 根据值自行判定变量类型(类型推断Type inference)
    var name = value
    
    
    1.2 一次定义多个变量
    // var identifier1, identifier2 type
    
    var username, sex string
    uamename = "kaka"
    age = 20
    
    //声明变量时赋值
    var a, b, c, d = 1, 2, 3, false
    
    
    1.3 批量声明变量
    //批量声明变量
    var (
    	a string
    	b int
    	c bool
    )
    
    a = "张三"
    b = 10
    c = true
    
    //批量声明并赋值
    
    var (
    a string = "张三"
    b int = 20
    c bool = true
    )
    

    2、变量的初始化

    Go 语言在声明变量的时候,会自动对变量对应的内存区域进行初始化操作。每个变量会被
    初始化成其类型的默认值,例如: 整型和浮点型变量的默认值为 0。 字符串变量的默认值
    为空字符串。 布尔型变量默认为 false。 切片、函数、指针变量的默认为 nil。

    当然我们也可在声明变量的时候为其指定初始值。变量初始化的标准格式如下:
    var 变量名 类型 = 表达式
    
    //举例
    var name string = "zhangsan"
    var age int = 18
    
    //一次初始化多个变量并赋值
    var name, age = "zhangsan", 20
    

    有时候我们会将变量的类型省略,这个时候编译器会根据等号右边的值来推导变量的类型完
    成初始化。

    var name = "Q1mi"
    var age = 18
    

    3、短变量声明法

    在函数内部,可以使用更简略的 := 方式声明并初始化变量。
    注意:短变量只能用于声明局部变量,不能用于全局变量的声明

    //变量名 := 表达式
    
    func main() {
    n := 10
    m := 200 // 此处声明局部变量 m
    fmt.Println(m, n)
    }
    
    //使用变量一次声明多个变量,并初始化变量
    m1, m2, m3 := 10, 20, 30
    

    4、匿名变量

    在使用多重赋值时,如果想要忽略某个值,可以使用 匿名变量(anonymous variable)。 匿
    名变量用一个下划线_表示,例如:

    func getInfo() (int, string) {
    	return 10, "张三"
    }
    
    func main() {
    	_, username := getInfo()
    	fmt.Println(username)
    }
    
    //匿名变量不占用命名空间,不会分配内存,所以匿名变量之间不存在重复声明。
    

    5、 注意事项

    • 变量必须先定义才能使用
    • go语言是静态语言,要求变量的类型和赋值的类型必须一致。
    • 变量名不能冲突。(同一个作用于域内不能冲突)
    • 简短定义方式,左边的变量名至少有一个是新的
    • 简短定义方式,不能定义全局变量。
    • 变量的零值。也叫默认值。
    • 变量定义了就要使用,否则无法通过编译。

    6、Go 语言中的常量

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

    6.1、使用 const 定义常量
    显式类型定义: const b string = "abc"
    隐式类型定义: const b = "abc"
    
    const pi = 3.1415
    const e = 2.7182
    
    const a, b, c = 1, false, "str" //多重赋值
    
    //声明了 pi 和 e 这两个常量之后,在整个程序运行期间它们的值都不能再发生变化了。
    
    6.2、多个常量也可以一起声明
    const (
    	pi = 3.1415
    	e = 2.7182
    )
    
    //const 。 同时声明多个常量时,如果省略了值则表示和上面一行的值相同。 例如:
    const (
    	n1 = 100
    	n2
    	n3
    )
    //常量 n1、n2、n3 的值都是 100。
    

    常量的注意事项:

    • 常量中的数据类型只可以是布尔型、数字型(整数型、浮点型和复数)和字符串型

    • 不曾使用的常量,在编译的时候,是不会报错的

    • 显示指定类型的时候,必须确保常量左右值类型一致,需要时可做显示类型转换。这与变量就不一样了,变量是可以是不同的类型值

    7、iota

    iota 是 golang 语言的常量计数器,只能在常量的表达式中使用。
    iota 在 const 关键字出现时将被重置为 0(const 内部的第一行之前),const 中每新增一行常量
    声明将使 iota 计数一次(iota 可理解为 const 语句块中的行索引)。

    const (
        a = iota
        b = iota
        c = iota
    )
    

    第一个 iota 等于 0,每当 iota 在新的一行被使用时,它的值都会自动加 1;所以 a=0, b=1, c=2 可以简写为如下形式:

    const (
        a = iota
        b
        c
    )
    
    7.1、const iota 使用_ 跳过某些值
    const (
    	n1 = iota //0
    	n2 //1
    	_
    	n4 //3
    )
    
    7.2、iota用法
    package main
    
    import "fmt"
    
    func main() {
        const (
                a = iota   //0
                b          //1
                c          //2
                d = "ha"   //独立值,iota += 1
                e          //"ha"   iota += 1
                f = 100    //iota +=1
                g          //100  iota +=1
                h = iota   //7,恢复计数
                i          //8
        )
        fmt.Println(a,b,c,d,e,f,g,h,i)
    }
    

    如果中断iota自增,则必须显式恢复。且后续自增值按行序递增

    自增默认是int类型,可以自行进行显示指定类型

    数字常量不会分配存储空间,无须像变量那样通过内存寻址来取值,因此无法获取地址

    7.3、 多个 iota 定义在一行
    const (
    	a, b = iota + 1, iota + 2 //1,2
    	c, d //2,3
    	e, f //3,4
    )
    
  • 相关阅读:
    libgdx学习记录21——Box2d物理引擎之碰撞Contact、冲量Impulse、关节Joint
    libgdx学习记录20——多线程MultiThread资源处理
    上google的方法
    libgdx学习记录19——图片动态打包PixmapPacker
    libgdx学习记录18——Box2d物理引擎
    libgdx学习记录17——照相机Camera
    libgdx学习记录16——资源加载器AssetManager
    libgdx学习记录15——音乐Music播放
    "_ACFacebookAppIdKey"
    IPhone之模型对象归档
  • 原文地址:https://www.cnblogs.com/slzhao/p/13289305.html
Copyright © 2020-2023  润新知