GO 语言学习 之 变量和常量

变量 

       变量顾名思义,存储的内容是不确定,只有在执行赋值后那一刻是确定的,因为你也不知道赋值后会不会被修改。

变量定义方式:

  1. var <变量名> <变量类型> 
  2. <变量名> := <变量值>
  3. var (a int, b, c....)

示例:

package main

import "fmt"

func main() {
    var a int  // 定义一个整型变量,默认是零值 (整形的零值是 0)
    b := 1     // 定义一个整型变量,并赋值为 1

    fmt.Printf("a = %d b = %d\n", a, b)

    // 定义相同类型的变量
    var (
        c,
        d,
        e = 10
    )
    fmt.Printf("c = %d d = %d e = %d\n", c, d, e)

    // 定义相同类型的变量
    var f, g, h string = "hi", "boy", "go"
    fmt.Printf("f = %s g = %s h = %s\n", f, g, h)

    // 定义多个不同类型的变量,我想通常没人这么写吧,也保不齐会有
    var i int, j float64, k []int
    fmt.Printf("i = %d j = %f k = %v\n", i, j, k)

    // 定义不相同类型的变量
    var (
        l string,
        m []int,
        n = 10
    )
    fmt.Printf("l = %s m = %v n = %d\n", l, m, n)
    
    // 多点几次看看有没有意外收获
    var ch chan int
    fmt.Printf("ch %v\n", ch)
    fmt.Printf("ch %v\n", ch)
}

扩展知识:

1. 各种数据类型的零值

        整数类型: 0

        浮点数类型: 0.000000

        复数类型:   0+0i

        布尔类型: false

        字符串类型: ""

        指针类型: nil

        切片类型 : []

        映射类型:

        chan类型:

        建议自己打印验证一下吧。

2. go 代码里面的变量,如果你定义了,你就得用,否则就会报错

3. 一种特殊的变量:下划线开头的变量, 声明变量可以不被使用,编译不报错

作用域

全局变量

        定义在函数外部的变量,其作用域是整个包。在同一个包内的所有函数都可以访问全局变量(包可以理解为同一个目录里面的所有go文件,都可以使用全局变量,不包含子目录)

局部变量

  1. 定义在函数内部的变量,其作用域仅限于函数内部或代码块内部。
  2. 定义在语句块内部的变量,作用域仅限于语句块内部使用

扩展知识:

  • 包级作用域:在 Go 语言中,全局变量具有包级作用域,即在定义它们的包内的任何地方都可以访问。只要在包内的函数、方法等代码块中,都能直接使用包内的全局变量(如果变量未导出,在包外无法访问)。
  • 不同包之间隔离:不同包之间的全局变量是相互隔离的,一个包无法直接访问另一个包的未导出全局变量,这有助于实现封装和模块化编程,使得每个包可以独立维护和演进,而不会对其他包造成意外影响。

常量

        常量可以理解为,一种特殊的变量,但其值是不会发生变化的,且不允许修改。这里只是让你这么理解不要真的这么使用。

常量定义方式:

  1.         const <常量名> = <常量值>
  2.         const (<常量名1>, <常量名2>. ...)

示例:

package main

import "fmt"

const PIE = 3.14

const (
    MAN   = 1,
    WOMAN = 2,
)

const (
    ERR_TYPE          = "error type"
    ERR_INPUT_PARAMS  = "error input PARAMS"
    ERR_OUTPUT_PARAMS = "error input PARAMS"
    ERR_VALUE_RANGE   = "outof range"
)

const (
    A = iota
    B,
    C,
    D
)

func main() {
    fmt.Printf("A %d B %d ERR_TYPE %s", A, B, ERR_TYPE)
}

扩展知识:

  1. 常量定义,未使用,可以编译成功,且运行正常
  2. 常量只能使用基本数据类型的值,不能使用复杂类型(切片,接口,结构体,数值等)

作用域

包级常量

        在包内但在函数外部定义的常量,称为包级常量。包级常量的作用域是整个包。在同一个包内的任何函数、方法或其他代码块中都可以直接访问该常量。如果包被其他包导入,且常量名是导出的(首字母大写),那么其他包也可以访问这个常量。

局部常量

        在函数内部或代码块内部定义的常量,称为局部常量。局部常量的作用域仅限于其定义所在的函数或代码块。一旦程序执行离开该函数或代码块,该常量就超出了作用域,无法再被访问。

你可能感兴趣的:(golang,学习,开发语言)