34

Golang:常量和变量

 4 years ago
source link: https://studygolang.com/articles/25065
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

标识符与关键字

标识符

由数字,字母,下划线组成,只能以字母和下划线开头.

关键字

关键字和保留字不能用作变量名.

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

37个保留字:

Constants:    true  false  iota  nil

        Types:    int  int8  int16  int32  int64  
                  uint  uint8  uint16  uint32  uint64  uintptr
                  float32  float64  complex128  complex64
                  bool  byte  rune  string  error

    Functions:   make  len  cap  new  append  copy  close  delete
                 complex  real  imag
                 panic  recover

变量

变量的来历

程序运行中的数据保存在内存中,如果操作某个数据时直接去代码中通过内存操作变量变量,可读性会非常差,操作会很困难,所以利用变量将这个数据的内存保存下来,以后直接通过变量就能找到内存上对应的数据了.

变量的类型

通常有:整型、浮点型、布尔型等

变量必须经过声明后才能使用。

标准声明

var 变量名 变量类型

变量生命以关键字 var 开头,类型放在变量后面

var name string
var age int
var isOK bool

批量声明

var(
    a string
    b int
    c bool
)

变量的初始化

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

我们当然也可以在声明的时候指定其初始值。

标准格式:

var 变量名 类型 = 表达式

例子:

var name string = "Andrew"
var age int = 21

或者一次初始化多个变量:

var name, age = "Andrew", 21

类型推导

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

var name = "Andrew"
var age = 21

短变量声明

函数内部 ,可以使用简略的 := 方式生命并初始化变量。

这是变量声明的通常做法。

package main

import (
    "fmt"
)
// 全局变量m
var m = 100

func main() {
    n := 10
    m := 200 // 此处声明局部变量m
    fmt.Println(m, n)
}

匿名变量

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

func foo() (int, string) {
    return 10, "Q1mi"
}
func main() {
    x, _ := foo()
    _, y := foo()
    fmt.Println("x=", x)
    fmt.Println("y=", y)
}

匿名变量不占用命名空间,不会分配内存,所以匿名变量之间不存在重复盛名。

<font color="red">注意事项:</font>

_:
_

常量

相对于变量,常量是恒定不变的值,多用于定义程序运行期间不会改变的那些值。

const
const Pi = 3.1415926
const e = 2.7182

声明 pi 后,在整个程序运行期间它们的值就 不发生改变 了。

多个常量一起声明:

const (
    pi = 3.1415
    e = 2.7182
)

const同时声明多个常量时,如果省略了值则表示和上面一行的值相同。

const (
    n1 = 100
    n2
    n3
)

上示例: n1n2n3 的值都是100

iota

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

iota 在const关键字出现时被重置为0。const中每新增一行常量声明将使用 iota 计数一次。使用 iota 能简化定义,在定义枚举时很有用。

例子:

const (
        n1 = iota //0
        n2        //1
        n3        //2
        n4        //3
    )

几个常见的iota示例

使用 _ 跳过某些值

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

定义数量级 (这里的 << 表示左移操作, 1<<10 表示将1的二进制表示向左移10位,也就是由 1 变成了 10000000000 ,也就是十进制的1024。同理 2<<2 表示将2的二进制表示向左移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
    )

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK