Go语言变量
文章目录
一、Go语言变量
- 变量来源于数学,是计算机语言中能存储计算结果或能表示值抽象的概念
- 变量可以通过变量名访问
- Go语言变量名由字母、数字、下划线组成,其中首个字符不能为数字
- 声明变量的一般形式是使用
var
关键字:
go
var 变量名 变量类型
- 可以一次声明多个变量:
go
var 变量名1, 变量名2 变量类型
- 以下是一个实例
go
package main
import "fmt"
func main() {
var a string = "Runoob" // 变量 a 类型 string字符串 值为 Runoob
fmt.Println(a) // 打印 a 变量
var b, c int = 1, 2 // 变量b c 类型 int 值为 b=1 c=2
fmt.Println(b,c)
}
- 以上实例输出结果如下
go
Runoob
1 2
二、变量声明
2.1、第一种声明方式
- 第一种,指定变量类型,如果没有初始化值,则变量默认为系统变量值(默认值根据系统而定)
go
var v_name v_type
- 零值就是变量没有做初始化时系统默认设置的值
go
package main
import "fmt"
func main() {
// 声明一个变量并初始化值
var a string = "RUNOOB"
fmt.Println(a)
// 没有初始化就是变量类型默认值(int类型默认值为0)
var b int
fmt.Println(b)
// bool零值为false
var c bool
fmt.Println(c)
}
- 以上实例执行结果为
bash
RUNOOB
0
false
- 数值类型(包括complex64/128)为0
- 布尔型为false
- 字符串为""(空字符串)
- 以下几种类型为nil
go
var a *int
var a []int
var a map[string]int
var a chan int
var a func(string) int
var a error // error 是接口
- 以下是一个实例
go
package main
import "fmt"
func main() {
var i int
var f float64
var b bool
var s string
// %v是默认格式动词,用于打印变量的默认表示形式
// %q用于打印带引号的字符串
fmt.Printf("%v,%v,%v,%q\n",i,f,b,s)
}
2.2、第二种声明方式
- 根据值自行判定变量类型
go
var v_name = value
- 以下是一个实例
go
package main
import "fmt"
func main() {
var a = true
var b = 888
var c = 6.6
var d = "真幸运"
// $T可以获取变量的类型 \n进行换行
fmt.Printf("%T\n",a)
fmt.Printf("%T\n",b)
fmt.Printf("%T\n",c)
fmt.Printf("%T\n",d)
}
- 输出结果如下
bash
bool
int
float64
string
2.3、第三种声明方式
- 如果变量已经使用
var
声明过了,再使用:=
声明变量,就会产生编译错误,格式如下
go
vname := value
- 以下是一个错误示范
go
var intVal int
intVal := 1 // 这时候会产生编译错误,因为intVal已经声明,不需要重新声明
- 直接使用下面的语句即可:
go
intval := 1 // 此不会产生编译错误,因为有声明的新变量,因为 := 是一个声明语句
intVal := 1
就相当于
go
var intVal int = 1
- 可以将
var f string = "Runoob"
简写为f := "Runoob"
go
package main
import "fmt"
func main() {
f := "Runoob" // 相当于 var f string = "Runoob"
fmt.Println(f)
}
- 输出结果如下
go
Runoob
2.4、多变量声明
go
// 类型相同的多个变量,非全局变量
var vname1, vname2, vname3 type
vname1, vname2, vname3 = v1, v2, v3
var vname1, vname2, vname3 := v1, v2, v3 // 和 Python 很像,不需要显示声明类型,自动推断
vname1, vname2, vname3 := v1, v2, v3 //出现在 := 左侧的变量就不应该是已经被声明过的,否则会导致编译错误
// 这种因式分解关键字的写法一般用于声明全局变量
var (
vname1 v_type1
vname2 v_type2
)
- 以下是一个实例
go
package main
import "fmt"
var x, y int
var (
a int
b bool
)
var c, d int = 1, 2
var e, f = 123, "hello"
// 这种不带声明格式的只能在函数体中出现
// g, h := 123, "hello"
func main() {
g, h := 123, "hello"
fmt.Println(x,y,a,b,c,d,e,f,g,h)
}
- 以上实例执行结果为
bash
0 0 0 false 1 2 123 hello 123 hello
2.5、打印变量占用字节
bash
package main
import (
"fmt"
"unsafe"
)
func main() {
var name string = "小美"
fmt.Println(unsafe.Sizeof(name))
}
- 以上实例执行结果为
go
16 // 占用16个字节