zoukankan      html  css  js  c++  java
  • Go语言-1-标识符与变量

    1. Go标识符

    编程语言的标识符是用来标识变量、类型、常量等语法对象的符号名称。一般分两类:语言设计者预留标识符,编程者自定义标识符
    
    Go语言标识符规则:数字、字母、下划线组成,开头必须是字母或下划线。
    
    注意:Go语言区分大小写。
    

    1.1 Go关键字

    关键字是指语言设计者保留的有特定语法含义的标识符。在Go语言中,一种只有25个关键字,分3类:
    
    • 引导程序整体结构的关键字:8个

        package     
        import      
        const       
        var     
        func        
        defer       
        go          
        return      
      
    • 声明复合数据结构的关键字:4个

        struct      
        interface   
        map         
        chan        
      
    • 控制程序结构的关键字:13个

        if else     
        for range break continue        
        switch select type case default fallthrough     
        goto        
      

    1.2 常量标识符(4个)

    true false
    iota
    nil
    

    1.3 空白标识符(1个)

    _ (也就是下划线)
    

    1.4 内置数据类型标识符

    数值(16个)
        整型(12个):
            byte int int8 int16 int32 int64
            unit unit8 uint16 uint32 uint64 uintprt
        浮点型(2个) :
            float32 float64
        复数型(2个):
            complex64 complex128
    
    字符和字符串型(2个)
        string rune
    
    接口型(1个)
        error
    
    布尔型(1个)
        bool
    

    Go是一种强类型静态编译型语言,在定义变量和常量时,需要显示的指出数据类型,当也Go其实可以自动推导出数据类型,这个见后面声明变量。

    1.5 内置函数(15个)

    make new len cap append copy delete panic recover close complex real image print println
    

    2. Go语言操作符

    Go语言一共有47个操作符,分8类:
    
    • 算术运算符(5个):

        +   -   *    /   %   
      
    • 位运算符(6个):

        &   |   ^   &^  >>  <<  
      
    • 赋值类运算符(13个):

        :=  =   +=  -=  *=  /=  %=  &=  |=  ^=  >>= <<= 
      
    • 比较运算符(6个):

        >   >=  <   <=  ==  !=  
      
    • 括号(6个):

        (   )   [   ]   {   }   
      
    • 逻辑运算符(3个):

        &&  ||  !   
      
    • 自增自减操作符(2个):

        ++  --  
      
    • 其他运算符(6个):
      , ; . ... <-

    3. Go语言变量

    变量: 使用一个名称来绑定一块内存地址,该内存地址中存放的数据类型由定义变量时指定的类型决定,该内存地址里面存放的内容可以改变。

    3.1 声明变量的两种方式:

    • 显示的完整声明:

        var varName dataType [= value]
      
        说明:var 用于声明变量;varName时变量名字;dataType是变量类型;value是变量初始值。
      
    • 短类型声明:

        varName := value
      
        说明:声明变量同时赋初始值,没有声明变量类型,因为Go会根据初始值自动推导出数据类型。:= 这种声明只能出现在函数(方法)内。
      

    在使用显示完整声明同时声明多个变量时,我们可以简写如下,(一般在声明全局变量时这样用):

        var (
    	    a  int    = 10
    	    b  string = "example"
    	    c  bool
    	    拉拉 int
        )
    

    这种叫因式分解关键字的写法,一般用于声明全局变量,一般在func 外定义。它等同于:

        var a  int    = 10
        var b  string = "example"
        var c  bool
        var 拉拉 int
    

    3.2 关于声明变量的一些说明

    1、首先,中文也可以做变量名,然后,string必须使用双引号,单引号会报错。

    2、当一个变量被var声明之后,若没有赋予初始值,系统自动赋予它该类型的零值。

    int 为 0
    float 为 0.0
    bool 为 false
    string 为空字符串""
    指针为 nil
    

    3、多变量可以在同一行进行赋值,也称为 并行 或 同时 或 平行赋值。如:

    a, b, c = 5, 7, "abc"
    

    改为简式声明:

    a, b, c := 5, 7, "abc"
    

    4、如果你想要交换两个变量的值,则可以简单地使用:

    a, b = b, a
    

    3.3 声明变量的一些坑

    1、在函数内声明了变量,则一定要使用它,否则会编译失败。但声明全局变量,不使用是没问题的。为了避免有未使用的变量导致代码编译失败,我们可以将该未使用的变量改为下划线标记符 _ 。

    2、同样,在Go语言中,如果引入的包未使用,也不能通过编译。有时我们需要引入的包,比如需要init(),或者调试代码时我们可能去掉了某些包的功能使用,你可以添加一个下划线标记符 _ 来作为这个包的名字,从而避免编译失败。

        package main
    
        import (
            "fmt"
            _ "time"
        )
    
        var (
            a  int    = 10
            b  string = "example"
            c  bool
            拉拉 int
        )
    
        func main() {
            fmt.Println("hello word")
        }
    

    3、要注意的是:全局变量和简式声明的变量尽量不要同名,否则很容易产生偶然的变量隐藏Accidental Variable Shadowing。

    3.4 关于零值nil

    nil 标志符用于表示interface、函数、maps、slices、channels、error、指针等的“零值”。如果你不指定变量的类型,编译器将无法编译你的代码,因为它猜不出具体的类型。

        package main
    
        func main() {  
            var x = nil // 错误
    
            _ = x
        }
    

    在一个 nil 的slice中添加元素是没问题的,但对一个map做同样的事将会生成一个运行时的panic:

        package main
    
        func main() {  
            var m map[string]int
            m["one"] = 1    //这里将会出错 error
    
        }
    

    字符串不会为 nil ,因为字符串的零值是空字符串 "" 。

    这对于经常使用 nil 分配字符串变量的开发者而言是个需要注意的地方。

        var str string  = ""
    

    根据前面的介绍,其实这样写和上面的效果一样:

        var str string
    
  • 相关阅读:
    Linux下套接字具体解释(九)---poll模式下的IO多路复用server
    【零基础学习iOS开发】【02-C语言】08-基本运算
    用python合并N个不同字符集编码的sql文件的实践
    小木虫emuch遭封禁,新域名muchong.com尚可用
    DB2中编目本机其中数据库的方法
    php socket 处理只是来数据流,该怎样避免(好像是堵塞了)
    Submission Details [leetcode] 算法的改进
    Qt Installer Framework的学习
    CI如何在子目录下可以设置默认控制器
    php CI 实战教程:如何去掉index.php目录
  • 原文地址:https://www.cnblogs.com/ChangAn223/p/11958975.html
Copyright © 2011-2022 走看看