go的基本语法介绍之变量的声明与初始化
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
1.常见基本数据类型
uint8无符号8位整形取值范围0-255
uint16无符号16位整形取值范围0-65535
uint32无符号32位整形取值范围0-4294967295
uint64无符号64位整形取值范围0-18446744073709551615
uint32 或 64 位
int8有符号8位整形取值范围-128-127
int16有符号16位整形取值范围-32768-32767
int32有符号32位整形取值范围-2147483648-2147483647
int64有符号64位整形取值范围-9223372036854775808-9223372036854775807
int与uint一样大小
byte类似 uint8
rune类似 int32
float3232位浮点类型
float6464位浮点类型
string字符串
bool布尔类型取值true或false
2.变量
Go 语言变量名由字母、数字、下划线组成首字符不能为数字不能使用关键字作为变量名。
Go语言中的25个关键字
3.变量的声明与初始化
在 HelloGo 中我们已经声明了不少的变量样式如下所示
var input string
上述代码中声明了一个 string
类型变量名为 input
的变量。Golang 在声明变量时会自动把变量对应的内存区域进行初始化操作每个变量会被初始化为其类型的默认值。变量声明样式如下所示
var name T
一些常见的变量的声明样式如下
var a int //声明一个 int 类型的变量
var b string //声明一个 string 类型的变量
var c []float //声明一个 float 类型的切片
var d struct{ // 声明一个匿名结构体该结构体有一个 int 类型的字段
x int
}
var e func() bool //声明一个函数变量
var (
f int
g string
)
// 同时声明多组变量
在 Golang 中每一个声明的变量都必须被使用否则会编译不通过。
对变量进行声明之后我们还需要对变量空白的内存区域进行初始化也就是赋值。与其他的语言一致通过 =
赋值符号初始化如下例子:
var a int = 100
上述代码中声明了一个 int
类型的 a
变量并将其赋值为 100
。变量初始化的样式为
var name T = 表达式
当然可以利用 Golang 提供的类型推导语法糖特性精简为以下的样式
var a = 100
b := "Hello"
在省略了类型属性后编译器会尝试根据等号右边的表达式推导出变量的类型。注意在使用 :=
短变量声明初始化时左值中的变量最少有一个变量必须是未定义过的变量否则会出现编译错误。同时 :=
不能出现在全局变量的声明和初始化中。
var a = 100
a := 100 //编译报错
a, b := 100, "OK" //无异常
在上述代码中a := 100
会在编译过程中抛出 no new variables on left side of :=
的报错而 a, b := 100
不会。
我们可以尝试运行 Variable 中的代码看一下编译器的类型推导结果。
// Variable.go
package main
import "fmt"
func main() {
var a int = 100
var b = "100"
c := 0.17
fmt.Printf("a value is %v, type is %T\n", a, a)
fmt.Printf("b value is %v, type is %T\n", b, b)
fmt.Printf("c value is %v, type is %T\n", c, c)
}
输出结果如下
a value is 100, type is int
b value is 100, type is string
c value is 0.17, type is float64
从上述表示结果可以看到变量都被赋予了正确的变量类型。需要注意的是为了提供精度浮点数类型会被默认推导为 float64
。
与 C 语言相比除了类型推导的语法糖特性Golang 还提供了多重赋值和匿名变量的语法糖特性。
在过去的编程语言中如果我们想要交换变量的值就需要借助一个第三方临时变量来实现如下例子所示
var a int = 1
var b int = 2
var tmp int
tmp = a
a = b
b = tmp
在 Golang 中我们可以通过多重赋值的特性轻松实现类似的变量交换任务如下所示
var a int = 1
var b int = 2
b, a = a, b
在多重赋值的过程中变量的左值和右值按照从左往右的顺序赋值。
在 Golang 中被声明的变量必须被使用否则会被编译器抛出异常。Golang 支持函数多返回值和上面所说的多重赋值但是有些时候我们不需要使用某些左值可以使用匿名变量处理具体例子如 Anonymous.go 所示
package main
import "fmt"
// 返回一个人的姓和名
func getName() (string, string){
return "王", "小二"
}
func main() {
surname, _ := getName()
_, personalName := getName()
fmt.Printf("My surname is %v and my personal name is %v", surname, personalName)
}
4.统计某个数据类型占的字节数
导包 import "unsafe"
使用导包当中的函数
unsafe.Sizeof(变量)