变量声明
官方DOC: http://golang.org//spec#Variable_declarations
Go中使用全新的关键字var来声明变量。var我们并不陌生,在Javascript 和C#中均有出现。不同的是Go和C#中变量属于强类型,在声明变量后就不允许改变其数据类型。
声明变量有多种形态:
-
var a int //声明一个int类型的变量
-
var b struct { //声明一个结构体
name string
}
-
var a = 8 //声明变量的同时赋值,编译器自动推导其数据类型
-
var a int = 8 //声明变量的同时赋值
-
var { //批量声明变量,简洁
a int
b string
}
变量初始化
变量的初始化工作可以在声明变量时进行初始化,也可以先声明后初始化。此时var关键字不再是必须的。
初始化变量有多种方式,每种方式有不同的使用场景:
-
在方法中声明一个临时变量并赋初值
> var tmpStr = “”
> var tmpStr string = “”
> tmpStr :=””
-
全局中已声明变量直接赋值
> tmpStr = “<body>”
我们看到有此两种方式:
-
var name [type] = value
如果不书写 type ,则在编译时会根据value自动推导其类型。
-
name := value
这里省略了关键字var,我很喜欢这种方式(可以少写代码,而没有任何坏处)。 但这有需要注意的是“ :=” 是在声明和初始化变量,因此该变量必须是第一次出现,如下初始化是错误的。但是要注意赋值时要确定你想要的类型,在Go中不支持隐式转换的。如果是定义个float64类型的变量,请写为 v1 :=8.0 而不是v1 :=8 。
-
var a int
a := 8
//我刚开始时老出现这种错误,一直将 “:= ” 当作 一般赋值语句处理
思考问题
初始化语句,在编译器上是如何进行自动类型推导的。一些字面常量是如何归类的?
如 8 → int , 8.0 → float64
-
package main
import (
"fmt"
"reflect"
)
func main(){
var v1 int = 8
var v2 byte = 8
v3 := 8
v4 := 8.0
fmt.Printf("v1 type :%s\n",reflect.TypeOf(v1)) //int
fmt.Printf("v2 type :%s\n",reflect.TypeOf(v2)) //uint8
fmt.Printf("v3 type :%s\n",reflect.TypeOf(v3)) //int
fmt.Printf("v4 type :%s\n",reflect.TypeOf(v4)) //float64
}
官方文档: http://golang.org/ref/spec#Constant_expressions
const ic = complex(0, c) // ic == 3.75i (untyped complex constant) const Huge = 1 << 100 // Huge == 1267650600228229401496703205376 (untyped integer constant)
^1 // untyped integer constant, equal to -2 |
------------------------2013-04-14补充----------------------------------------
|
---------------------------------2013-04-14 end------------------------------------------------
有疑问加站长微信联系(非本文作者)