zoukankan      html  css  js  c++  java
  • [golang note] 变量常量

    变量


    • 变量声明

            golang变量声明的关键字为var

            golang变量声明时类型信息放置在变量名之后

    ▶ 单个变量声明

    ▪ 语法如下

    var name type

    ▪ 示例如下

    var v1 int             // 整形
    var v2 *int            // 指针
    var v3 string          // 字符串
    var v4 []int           // 数组切片
    var v5 [10]int         // 数组
    var v6 map[string]int  // map
    var v8 func(a int) int // 函数
    var v7 struct {        // 结构体
        f int
    }

    ▶ 多个变量声明

    ▪ 语法如下

    var (
        name1 type1
        name2 type2
        name3 type3
        ...
    )

    ▪ 示例如下

    var (
        v1 int             // 整形
        v2 *int            // 指针
        v3 string          // 字符串
        v4 []int           // 数组切片
        v5 [10]int         // 数组
        v6 map[string]int  // map
        v8 func(a int) int // 函数
        v7 struct {        // 结构体
            f int
        }
    )

    • 变量声明时初始化

    ▶ 第一种方式

    ▪ 语法如下

    var name type = value
    
    var (
        name1 type1 = value1
        name2 type2 = value2
        name3 type3 = value3
        ...
    )

    ▪ 示例如下

    var v1 int = 10
    var (
        v2 int    = 20
        v3 string = "abc"
    )

    ▶ 第二种方式

    ▪ 语法如下

    var name = value // 编译器可以自动推导出变量的类型

    ▪ 示例如下

    var v1 = 10
    var (
        v2 = 20
        v3 = "abc"
    )

    ▶ 第三种方式

            golang引入了一个c和c++中没有的符号:=,用于明确表明同时进行变量声明和初始化的工作

            出现在:=左边的变量不应该是已声明过,否则编译器将给出错误:no new variables on left side of :=。

    ▪ 语法如下

    name := value // 编译器可以自动推导出变量的类型

    ▪ 示例如下

    v1 := 10
    v2 := 20
    v3 := "abc"

    • 变量赋值

    ▶ 多元赋值

    ▪ 语法如下

    variable1, variable2, ... variablen = value1, value2, ... valuen

    ▪ 示例如下

    var v1, v2 int
    v1, v2 = 10, 20

           多元赋值支持不引入中间变量来交换两个变量的值。

    v1 := 10
    v2 := 20
    v1, v2 = v2, v1

    • 变量包可见性

            golang中,以大写字母开头的变量在包外可见,否则为包内私有。

           例如下面golearning工程下有两个包:main包和math包。其中src/math/math.go中定义了一个Pi变量,在src/main/main.go中使用该变量:

          

    // math.go
    package math
    
    var Pi float64 = 3.14159265358979323846
    
    // main.go
    package main
    
    import (
        "fmt"
        "math"
    )
    
    func main() {
        fmt.Println(math.Pi)
    }

           如果将Pi改为小写pi,那么编译器将给出错误:

          

    常量


            golang中,常量是指编译期间运算得出且不可改变的值

    • 常量定义

            golang常量定义的关键字为const

    // 定义单个常量
    const Pi float64 = 3.14159265358979323846
    
    // 定义多个常量
    const (
        Size int64 = 1024
        Eof  int64 = -1
    )

            golang常量定义可以限定常量类型,也可以不限定。如果常量定义时没有限定类型,那么它与字面常量一样,是一个无类型常量

    // 定义单个常量
    const Pi = 3.14159265358979323846 // 无类型浮点常量
    
    // 定义多个常量
    const (
        Size = 1024 // 无类型整型常量
        Eof  = -1   // 无类型整型常量
    )

            golang常量定义的右值可以是一个在编译期运算的常量表达式,这与c语言中宏的性质是一样的。

    const Mask = 1 << 3            // correct
    const Path = os.Getenv("PATH") // incorrect : const initializer os.Getenv("PATH") is not a constant

    • 特殊常量

    ▶ 字面常量

            字面常量(literal),是指程序中硬编码的常量

            golang中字面常量是无类型的,只要该字面常量在相应类型的值域范围内,就可作为该类型的常量。

    -12             // 整数类型的常量
    3.14159265358979323846  // 浮点类型的常量
    3.2+12i           // 复数类型的常量
    true             // 布尔类型的常量
    "foo"            // 字符串常量

    ▶ 预定义常量

            golang预定义了这些常量:truefalseiota

    ▪ true和false

            预定义常量true和false所属的基础类型为bool。

    package main
    
    import (
        "fmt"
        "reflect"
    )
    
    func main() {
        const Mask = true
        fmt.Println(reflect.TypeOf(Mask)) // bool
    }

    ▪ iota

            预定义常量iota所属的基础类型为int。

            iota可认为是一个可被编译器修改的常量:在每一个const关键字出现时值重置为0,然后在下一个const出现之前,每出现一次iota,其所代表的数字会自动增1。

    const (
        a = iota // 0
        b = iota // 1
        c = iota // 2
    )
    
    const (
        d = 1 << iota // 1
        e = 1 << iota // 2
        f = 1 << iota // 4
    )
    
    const (
        g = 42 * iota // 0
        h = 42 * iota // 42
        i = 42 * iota // 84
    )

            如果两个const赋值语句的表达式一样,那么可以省略后一个赋值表达式。

    const (
        a = iota // 0
        b        // 1
        c        // 2
    )
    
    const (
        d = 1 << iota // 1
        e             // 2
        f             // 4
    )
    
    const (
        g = 42 * iota // 0
        h             // 42
        i             // 84
    )

    ▶ 枚举

            golang并不支持众多其他语言中支持的enum关键字。

            在golang中定义枚举值的方式:在const后跟一对圆括号的方式定义一组常量。

    const (
        Sunday = iota
        Monday
        Tuesday
        Wednesday
        Thursday
        Friday
        Saturday
        NumberOfDays
    )

    • 常量包可见性

            golang中,以大写字母开头的常量在包外可见,否则为包内私有。

  • 相关阅读:
    PAT(乙级)2020年冬季考试
    Educational Codeforces Round 105 (Rated for Div. 2)【ABC】
    三省吾身
    初识SpringBoot
    Controller 层中,到底是 返回界面 还是JSON?(转)
    IDEA控制台中文乱码解决
    springboot引入外部依赖jar包(转)
    Java7的try-with-resources声明(转)
    Java对象的序列化和反序列化(转)
    AcWing1303. 斐波那契前 n 项和(递推/矩阵快速幂)
  • 原文地址:https://www.cnblogs.com/heartchord/p/5191026.html
Copyright © 2011-2022 走看看