Go语言学习笔记1 变量,类型以及赋值

1.变量

1.1 声明变量

使用var关键字能够建立一个指定类型的变量:express

var i int = 0
var i = 0
var i int

以上三个表达式均是合法的,第三个表达式会将i初始化为int类型的零值,0;若是i是bool类型,则为false;i是float64类型,则为0.0;i为string类型,则为"";i为interface类型,则为nil;i为引用类型,则为nil;若是i是struct,则是将struct中全部的字段初始化为对应类型的零值。ide

能够在同一条语句中声明多个变量:函数

var i, j, k int                 // int, int, int
var b, f, s = true, 2.3, "four" // bool, float64, string

 

包内可见的变量在main函数开始执行以前初始化,本地变量在函数执行到对应的声明语句时初始化。oop

变量也能够经过函数的返回值来初始化:spa

var f, err = os.Open(name) // os.Open returns a file and an error  

1.2 短声明

在函数内部,有一种短声明的方式,形式是name := expression,这里,变量的类型是由编译器自动肯定的。指针

anim := gif.GIF{LoopCount: nframes}
freq := rand.Float64() * 3.0
t := 0.0

由于这种形式很是简洁,所以在函数内部(本地变量)大量使用。若是须要为本地变量显式的指定类型,或者先声明一个变量后面再赋值,那么应该使用varcode

1 i := 100                  // an int
2 var boiling float64 = 100 // a float64
3 var names []string
4 var err error
5 var p Point

就像var声明同样,短声明也能够并行初始化blog

i, j := 0, 1  

要谨记的是,:=是一个声明,=是一个赋值,所以在须要赋值的场所不能使用 :=ci

 

1 var i int  
2 i := 10//panic : no new variables on left side of :=  

 

能够利用并行赋值的特性来进行值交换:编译器

1 i, j = j, i // swap values of i and j  

有一点须要注意的:短声明左边的变量未必都是新声明的!

1 in, err := os.Open(path1) //新声明两个变量:in, err  
2 //...  
3 out, err := os.Create(path2)   
4 /*由于err已经声明过,所以这里只新声明一个变量out。 
5 虽然这里使用:=,可是err是在上个语句声明的,这里仅仅是赋值*/  

并且,短声明的左边变量必须有一个是新的,若都是以前声明过的,会报编译错误:

1 f, err := os.Open(infile)  
2 // ...  
3 f, err := os.Create(outfile) // compile error: no new variables 

正确的写法是这样的:

1 f, err := os.Open(infile)  
2 // ...  
3 f, err = os.Create(outfile) // compile ok  

1.3 指针

 

  1. f, err := os.Open(infile)  
  2. // ...  
  3. f, err = os.Create(outfile) // compile ok
相关文章
相关标签/搜索