Go 语言的每个变量都拥有本身的类型,必须通过声明才能开始用。数据结构
标准格式:函数
var 变量名 变量类型
变量的声明以关键字 var 开头,行尾不须要写分号ui
常见变量的数据类型有:整型、浮点型、布尔型、结构体等。spa
例如:指针
var a int var b string var c []float32 var d func() bool var e struct{ x int }
代码说明:code
优雅格式声明(推荐):blog
var ( a int b string c []float32 d func() bool e struct { x int } )
使用关键字var和括号,能够将一组变量定义放在一块儿。 内存
变量的声明能够包含初始值,每个变量对应一个值。字符串
若是初始化值已存在,则能够省略类型;变量会从初始值中得到类型。编译器
变量初始化的标准格式:
var 变量名 类型 = 表达式
简化形式:
var 变量名 = 表达式
例如:
var x int = 100
能够写成:
var x = 100
默认值:
没有明确初始值的变量声明会被赋予它们一个默认值:
整型和浮点型变量的默认值为 0。
字符串变量的默认值为空字符串。
布尔型变量默认为 bool。
切片、函数、指针变量的默认为 nil。
在函数中,简洁赋值语句 := 可在类型明确的地方代替 var 声明。
注意:函数外的每一个语句都必须以关键字开始(var
等),所以 :=
结构不能在函数外使用。
例如:
x := 100
编译器会自动根据右值类型推断出左值的对应类型。
注意:因为使用了 :=
,而不是赋值的 =
,所以推导声明写法的左值变量必须是没有定义过的变量。若定义过,将会发生编译错误。
注意:在多个短变量声明和赋值中,至少有一个新声明的变量出如今左值中,即使其余变量名多是重复声明的,编译器也不会报错,例如:
x, z := a, b y, z := a, b
使用Go的“多重赋值特性”,能够轻松完成变量交换的任务。
package main import "fmt" func main() { var a = 100 var b = 200 a, b = b, a fmt.Println(a, b) }
多重赋值时,变量的左值和右值按从左到右的顺序赋值。
在使用多重赋值时,若是不须要在左值中接收变量,可使用匿名变量。
匿名变量用一个下划线 _ 来表示
,使用匿名变量时,只须要在变量声明的地方使用下划线替换便可。例如:
var a int a, _ = 100, 200
注意:匿名变量不占用命名空间,不会分配内存。匿名变量与匿名变量之间也不会由于屡次声明而没法使用。
常量是恒定不变的值,例如圆周率。
常量的声明与变量相似,只不过是使用 const 关键字。
常量能够是字符、字符串、布尔值和数值。
常量不能用 := 语法声明。
常量的声明, 例如:
const pi = 3.1415926
注意:常量在声明的时候必须赋值。
多个变量能够一块儿声明,相似的,多个变量也能够一块儿声明。例如:
const ( pi = 3.1415926 e = 2.718281 )
Go语言中有丰富的数据类型,除了基本的整型、浮点型、布尔型、字符串外,还有切片、结构体、函数、map、通道(channel)等。
Go 语言的基本类型和其余语言大同小异。
整型能够分红如下两个大类:
按长度分为:int八、int1六、int3二、int64
对应的无符号整型:uint八、uint1六、uint3二、uint64
其中,uint8 就是咱们熟知的 byte 型.
Go语言支持两种浮点型数:
float3二、float64.
注意:没有float
Go语言的浮点型默认声明为float64.
布尔型数据只有 true(真)和 false(假)两个值。
注意:
在Go语言中, true和false均为小写 不容许将整型强制转换为布尔型
字符串的两种表示形式:
1. 双引号,会识别转义字符
2. 反引号,不会识别转义字符。以字符串的原生形式输出,包括换行和特殊字符。
转义符 | 含义 |
\r | 回车符(返回行首) |
\n | 换行符 |
\t | 制表符 |
\' | 单引号 |
\" | 双引号 |
\\ | 反斜杠 |
const str = ` 第一行 第二行 第三行 \r\n ` fmt.Println(str)
代码运行结果:
第一行 第二行 第三行 \r\n
字符串中的每个元素叫作“字符”,在遍历或者单个获取字符串元素时能够得到字符。
Go语言的字符有如下两种:
Go语言使用类型前置加括号的方式进行类型转换,通常格式以下:
T(表达式)
其中,T 表明要转换的类型。表达式包括变量、复杂算子和函数返回值等。
注意:在类型转换时,须要考虑两种类型的关系和范围,是否会发生数值截断等。
package main import "fmt" func main(){ var n1 int = 20 var n2 float64 = float64(n1) n2 = n2 + 3.6 var n3 int32 = int32(n2) // 当将一个float类型转成 int时,是直接去掉小数点后的部分 fmt.Printf("n1 type=%T, val=%v; n2 type=%T, val=%v; n3 type=%T, val=%v\n", n1, n1, n2, n2, n3, n3) }
代码运行结果:
n1 type=int, val=20; n2 type=float64, val=23.6; n3 type=int32, val=23