Go基础知识入门 - 变量和常量

79 阅读2分钟

定义变量

go是静态语言,静态语言和动态语言相比差异很大

  • 变量必须先定义后使用
  • 变量必须有类型
  • 类型定下来不能改变

// 全局变量和局部变量
var(
    name = 1
    age = 18
    ok boolfunc main(){
    // 方法一
    var name int
    name = 1
    
    // 方法二
    var name = 1
    
    //方法三 简洁定义
    name := 1
    
    // 同时定义多个变量
    var user1, user2, user3 = '123', 1, '345' 
}

注意

  1. 变量名不能冲突

  2. 变量定义了不使用是不行的,全局变量除外

  3. 要求变量的类型和赋值类型一致

  4. 简洁变量不能应用于全局

  5. 变量是有零值(默认值)

定义常量

常量定义的时候就指定的值,不能修改

func main(){
    // 显式定义
    const PI float32 = 3.1415926
    
    const(
        UNKNOWN = 1
        FEMALE = 2
        MALE = 3
    )
    
    const(
        X int = 1
        Y
        A = "123"
        B
    )
    
    // 1 1 '123' '123'
    fmt.Println(X,Y,A,B)
}

注意

  1. 常量尽量全部大写
  2. 常量类型只可以定义bool、数值(整数、浮点数和复数)和字符串
  3. 定义的常量可以不使用
  4. 显式定义左右数据类型要一致
  5. 成组定义的时候,没有定义类型和值回自动沿用上一个

iota

iota,特殊常量,可以认为是一个可以被编译器修改的常量

func main(){
    const(
       USER1 = iota
       USER2
       USER3 = "123" // iota内部仍然会增加计数器
       USER4 
       USER5 = iota
    )
    
    // 0 1 '123' '123' 3 
    fmt.Println(USER1,USER2,USER3,USER4, USER5)
}

注意

  1. 如果中断了iota后,需要显式恢复,后续会自动递增
  2. 自增类型默认是int类型
  3. iota能简化const类型定义
  4. 每次出现const,iota会被初始化

匿名变量

因为变量定义了必须要使用,所以引入了匿名变量,可以不需要使用


func a()(int, bool){
    return 0,false
}

func main(){
   // 匿名变量
   var _ int  
   
   _,ok := a()
   
   if ok{
      ...
   }
}

变量的作用域

func main(){
   {
       localName := "local"
       fmt.Println(localName)
   }
   
   // error
   fmt.Println(localName)
}