zoukankan      html  css  js  c++  java
  • Go语言变量

    变量来源于数学,是计算机语言中能储存计算结果或能表示值抽象概念。变量可以通过变量名访问。--百度百科

    变量相当于内存中一个数据存储空间的表示,你可以把变量看作是房屋的门牌号,通过门牌号我们可以找到房间,同样,通过变量名可以访问或修改变量(值)。

    标识符命名规则

    Golang对各种变量、方法、函数等命名时使用的字符序列成为标识符

    Go中函数、变量、常量、类型、语句标签和包的名称遵循一个简单的规则:名称的开头是一个字母(Unicode中的字符即可)或下划线,后面可以跟任意数量的字符、数字和下划线,并区分大小写。

    如果一个实体在函数中声名,她只在函数局部有效。如果在函数外声明,它将对包里面的所有源文件可见。实体第一个字母的大小写决定其可见性是否跨包。如果名称以大写字母开头,它是导出的,意味着它对包外是可见和可访问的,可以被自己包之外的其他程序所引用,像fmt包中的Printf。包名总是由小写字母组成。

    包名:保持package的名字和目录保持一致,尽量采取有意义的包名,简短、有意义,不要和标准库冲突

    Go关键字和预声明常量、类型和函数

    Go有25个像if和switch这样的关键字,只能用在语法允许的地方,他们不能作为变量名称:

    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
    

    另外,还有三十几个内置的预声明的常量、类型和函数:(还有一种说法叫做预定义标识符)

    常量:

    true            false            iota            nil
    

    类型:

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

    函数:

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

    定义变量的三种方式

    第一种,指定变量类型,声明后若不赋值,使用默认值。

    var var_name var_type
    var_name = value
    
    示例:
    var num int
    num = 10
    

    第二种,不指定数据类型,根据值自行判断变量类型

    var var_name = value
    
    示例:
    var num = 10   //编辑器能根据值的类型推断num的类型
    

    第三种,省略var,这种最简洁,也最常用

    var_name := value
    
    示例:
    num := 10
    

    注意事项:

    • := 左侧的变量至少有一个是未声明的,否则会导致编译错误。

      package main
      import "fmt"
      func main() {
          var a = 10
          a := 20
          fmt.Println(a)
      }
      

      但是如果左侧有未声明过的新变量,则是允许的。短变量声明不需要声明所有在左边的变量。如果一些变量在同一个词法块中声明,那么对于那些变量,短声明的行为等同于赋值。

      package main
      import "fmt"
      func main() {
          var a = 10
          a, b := 20, 30
          fmt.Println(a, b)
      }
      

    • 同时声明多个变量

      package main
      
      import "fmt"
      
      func main() {
      
          var a, b int = 1, 2
          var c, d = 2.3, 4.5
          e, f := "cstxco", 6
          fmt.Println(a, b, c, d, e, f)
      }
      
    • 在函数外声明的全局变量如果想赋值必须在声明的同时赋初值,如果不赋值,系统会默认给默认值0,但是不能在声明后再赋值(可以在函数里面再赋值),那样运行的话会运行时报错

      package main
      import "fmt"
      var a = "Hello World"
      var b int = 20
      var c bool
      
      func main() {
          fmt.Println(a, b, c)
      }
      

      错误用法

      package main
      import "fmt"
      //错误用法(先声明,再赋值)
      var var1, var2, var3 int
      var1, var2, var3 = 1, 2, 3
      func main() {
          fmt.Println(a, b, c)
      }
      

    • 在Go程序中声明的变量必须使用,不使用的话会报错;导入的包也必须使用,不使用的话也会报错。(声明的全局变量可以不使用)

      package main
      var a = 20
      func main() {
          var b int = 40
      }
      

    • 声明变量可以采用大括号形式

      package main
      
      import "fmt"
      
      var (
        a int = 4
        b float32
      )
      
      func main() {
      
        var (
        	c int = 6
        	d float64
        )
      
        fmt.Println(a, b, c, d)
      }
      

    关于“零”值

    类型和表达式部分可以省略一个,但是不能都省略。如果类型省略,它的类型由初始化表达式决定;如果表达式省略,其初始值对应于类型的值——对于数字是0,对于布尔值是flase,对于字符串是"",对于接口和引用类型(slice、指针、map、通道、函数)是nil。对于一个像数组或结构体这样的复合类型,零值是其所有元素和成员的零值。

    获取用户终端输入

    在编程中,需要接收用户输入的数据,就可以使用键盘输入语句来获取。

    步骤:

    • 导入fmt包
    • 调用fmt包的fmt.Scanln()或者fmt.Scanf()

    示例:

    要求:可以从控制台接收用户信息[姓名、年龄、薪水、是否通过考试]

    1. 使用fmt.Scanln()获取(没有没有格式化要求的话,使用这种即可)

      package main
      
      import "fmt"
      
      func main() {
      
          //可以从控制台接收用户信息[姓名、年龄、薪水、是否通过考试]
          //1.先声明需要的变量
          var name string
          var age byte
          var sal float32
          var isPass bool
      
          fmt.Println("请输入姓名:")
          //当程序执行到fmt.Scanln(&nme),程序会停止在这里,等待用户输入,并回车
          fmt.Scanln(&name)
      
          fmt.Println("请输入年龄:")
          fmt.Scanln(&age)
      
          fmt.Println("请输入薪水:")
          fmt.Scanln(&sal)
      
          fmt.Println("请输入是否通过考试:")
          fmt.Scanln(&isPass)
      
          fmt.Printf("名字是 %v 
       年龄是 %v 
       薪水是 %v 
       是否通过考试 %v 
      ", name, age, sal, isPass)
      }
      

    2. 使用fmt.Scanf()获取(如果对输入的数据进行格式化操作,可以使用这种)

      package main
      
      import "fmt"
      
      func main() {
      
          //可以从控制台接收用户信息[姓名、年龄、薪水、是否通过考试]
          //1.先声明需要的变量
          var name string
          var age byte
          var sal float32
          var isPass bool
      
          fmt.Println("请输入姓名、年龄、薪水、是否通过考试,使用空格隔开:")
          
          fmt.Scanf("%s %d %f %t", &name, &age, &sal, &isPass)
      
          fmt.Printf("名字是 %v 
       年龄是 %v 
       薪水是 %v 
       是否通过考试 %v 
      ", name, age, sal, isPass)
      
      }
      

  • 相关阅读:
    mysql启动和关闭外键约束的方法(FOREIGN_KEY_CHECKS)
    如果感觉不好,最后一面你需要更努力表达你的优势。最后一面打动面试官的可能往往是你的真诚和热情
    你的最终目的不是要进入该公司,而是要进入该公司你最想去的部门乃至项目组
    如果你说最近在看《诛仙》,平时喜欢玩LOL,你就是在把自己往悬崖上推
    Qt中嵌入Directx11(有句柄就可以)
    2015腾讯暑期实习武汉站面试经历(大学里的小朋友有这样的技术水平,只能说他规划的好、觉醒的早)
    NET Core开发-获取所有注入(DI)服务
    jQuery.data的是jQuery的数据缓存系统
    理解数字图像处理中的卷积
    Obstack是C标准库里面对内存管理的GNU扩展
  • 原文地址:https://www.cnblogs.com/itbsl/p/9855036.html
Copyright © 2011-2022 走看看