美文网首页
03 Go中的变量和常量

03 Go中的变量和常量

作者: learninginto | 来源:发表于2021-03-19 09:37 被阅读0次
    声明变量
    • var声明

    var 变量名称 类型

    var username string
    fmt.Println(username)
    //打印为空
    
    1. Go中的变量名由字母、数字、下划线构成(可以是汉字),且首字母不能是数字;Go中的关键字和保留字都不能用作变量名。
    2. 在同一个作用域中,变量不能重复声明
    • 定义及初始化

    先定义,再初始化

    var username string
    username = "张三"
    

    定义时初始化

    var username string = "张三"
    

    这里提示,没必要指定张三string类型,go可以通过类型推到推断出来。

    第三种初始化变量方式,和JavaScript的非严格模式一致(推荐)

    var username = "张三"
    fmt.Println(username)
    
    • 一次定义多个变量

    var 变量名称,变量名称 类型

    var a1, a2 string
    a1 = "aabb"
    a2 = "ccdd"
    

    var (变量名称 类型 变量名称 类型)

    var (
        username string
        age int
        sex string
    )
    username = "张三"
    age = 18
    sex = "男"
    
    • 上面的简写
    var (
        username string = "张三"
        age int = 18
    )
    

    通常在这里,编译器还是会给出提示,建议省略类型

    • 上面的简写的简写
    var(
        username = "张三"
        age = 18
    )
    
    短变量声明法

    在函数内部,可以使用更简略的:=方式声明并初始化变量

    注意:短变量只能用于声明局部变量,不能用于全局变量的声明

    username := "张三"
    fmt.Println(username)
    fmt.Printf("username类型:%T", username)
    //string
    

    使用短变量声明多个变量并初始化

    a, b, c := 101 ,102, "张三"
    fmt.Println(a, b, c)
    
    匿名变量

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

    func getUserinfo()(string, int){
        return "zhangsan", 10   
    }
    var username, age = getUserinfo()
    fmt.Println(username, age)
    

    当我们想忽略某个值的时候,通常想这样写

    var username = getuserinfo()
    fmt.Println(username)
    

    但是编译器告诉我们,这里返回了两个值,而你只用了一个变量来接收。所以,建议这样写

    var username, _ = getUserinfo()
    fmt.Println(username)
    //张三
    var _, age = getUserinfo()
    fmt.Println(age)
    //10
    

    匿名变量不占用命名控件,不会分配内存,所以匿名变量之间不存在重复声明。

    常量(与C一致)

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

    • 使用const定义常量
    const pi = 3.141592653589793238462643383279502884197169399375105820974944592307816
    const e = 2.7128
    

    声明了pi和e这两个常量之后,在整个程序运行期间,它们的值都不能再发生变化了

    const pi string
    pi = "xxxx"
    fmt.Println(pi)
    //报错,在定义的时候没有赋值
    
    • 多个常量可以一起声明
    const (
        A = "A"
        B = "B"
    )
    

    在声明常量的时候,只给第一个赋值了,而其他的没有赋值,则其他的和第一个的数值相同

    const (
        n1 = 100
        n2
        n3
    )
    fmt.Println(n1, n2, n3)
    //100 100 100
    
    const结合iota使用

    iota是go的常量计数器,只能在常量的表达式中使用

    iota在const关键字出现时被重置为0(const内部的第一行之前),const中每新增一行变量声明,iota计数一次(iota可理解为const语句块中的行索引、类似于浏览器垃圾回收机制的标记计数法)

    const a = iota //a = 0
    const (
        b = iota //b = 0
        c       //这里的c是累加,c = 1
    )
    
    • iota使用_跳过某些值
    const (
        n1 = iota // 0
        n2  //1
        _
        n3 //3
    )
    
    • iota声明中间插队
    const (
        n1 = iota //0
        n2 = 100 //100
        n3 = iota //2
        n4 //3
    )
    fmt.Println(n1, n2, n3, n4)
    //0 100 2 3
    
    • 两个iota可以定义在一行
    const (
        n1, n2 = iota + 1, iota + 2// 1 2
        n3, n4 //2 3 
        n5, n6 //3 4
    )
    const (
        num1, num2 := 20, 30 // 20,30
    )
    

    相关文章

      网友评论

          本文标题:03 Go中的变量和常量

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