over-golang/01-基础语法/02-标识符与变量.md
2021-07-02 18:11:59 +08:00

3.2 KiB
Raw Permalink Blame History

一 标识符

1.1 关键字

Go现在拥有25个关键字

if      for     func    case        struct      import               
go      type    chan    defer       default     package
map     const   else    break       select      interface
var     goto    range   return      switch      continue     fallthrough                

1.2 保留字

内建常量:  
        true        false       iota        nil
内建类型:  
        int         int8        int16       int32       int64
        uint        uint8       uint16      uint32      uint64      uintptr
        float32     float64 
        complex128  complex64
bool      
        byte        rune        string 	    error
内建函数:   
        make        delete      complex     panic       append      copy    
        close       len         cap	        real        imag        new   	    recover

二 变量

2.1 变量声明

Go变量声明的三种方式

var a int		    // 声明一个变量默认为0
var b = 10		    // 声明并初始化,且自动推导类型
c := 20			    // 初始化,且自动推导

注意:

  • :=定义变量只能在函数内部使用所以经常用var定义全局变量
  • Go对已经声明但未使用的变量会在编译阶段报错** not used
  • Go中的标识符以字母或者下划线开头大小写敏感
  • Go推荐使用驼峰命名

2.2 多变量声明

var a,b string
var a1,b1 string = "哼","哈"
var a2,b2 int = 1,2                             //类型可以直接省略
c,d := 1,2
var(
	e int
	f bool
)

2.3 变量值互换

m,n = n,m		//变量值互换
temp,_ = m,n		//匿名变量变量值互换且丢弃变量n 

2.4 _丢弃变量

_是个特殊的变量名,任何赋予它的值都会被丢弃。该变量不占用命名空间,也不会分配内存。

_, b := 34, 35      //将值`35`赋予`b`,并同时丢弃`34`

2.5 := 声明的注意事项

下面是正确的代码示例:

in, err := os.Open(file)
out, err := os.Create(file)     // err已经在上方定义此处的 err其实是赋值

但是如果在第二行赋值的变量名全部和第一行一致,则编译不通过:

in, err := os.Open(file)
in, err := os.Create(file)     // 即 := 必须确保至少有一个变量是用于声明

:=只有对已经在同级词法域声明过的变量才和赋值操作语句等价,如果变量是在外部词法域声明的,那么:=将会在当前词法域重新声明一个新的变量。

2.6 多数据分组书写

Go可以使用该方式声明多个数据

const(
    i = 100
    pi = 3.1415
    prefix = "Go_"
)
    
 var(
    i int
    pi float32
    prefix string
)

三 关键字iota

关键字iota声明初始值为0每行递增1

const (
    a = iota    	        // 0
    b =	iota 		        // 1        
    c = iota 		        // 2
)

const (
    d = iota    	        //  0
    e 				// 1        
    f 				// 2
)

//如果iota在同一行则值都一样
const (
    g = iota    	        //0
    h,i,j = iota,iota,iota      // 1,1,1
    // k = 3                    // 此处不能定义缺省常量,会编译错误	
)