变量定义
go是静态语言
- 1、变量必须先定义后使用
- 2、变量必须有类型
- 3、类型定义后不能改变
- 4、变量定义了必须使用(全局变量除外)
语言变量
var identifier type
变量声明
1、指定变量类型,如果没有初始化,则变量默认零值
数值类型: 0
布尔类型: false
字符串: ""
返回值为:nil
var a *int
var a [] int
var a map[string] int
vat a chain int
var a func(string) int
var a error //error是接口
2、根据值自行判断变量类型
var name = 'name'
3、如果变量已经使用var声明过了,再使用:=声明变量,就产生编译错误
v_name := value
intVal := 1 等价于 var intVal int = 1
值类型和引用类型
值类型
int float bool string
这些都属于值类型,使用这些类型的变量直接指向内存中的值
赋值:通过值拷贝方式
储存在堆中
引用类型
赋值:指针(内存地址)拷贝
储存在栈中
多变量声明
非全局变量
var identifier1, identifier2 type
因式分解关键字的写法一般用于全局变量
var (
vname1 v_type1
vname2 v_type2
)
package main
import (
"fmt"
)
// 全局变量
var (
count1 int8 = 0
count2 int8 = 10
uname string = "test"
)
func main() {
age := 1
fmt.Println(age)
var age2 int
fmt.Println(age2)
// 多变量定义
var user1, user2, user3 = "igor", "yu", "yuyu"
fmt.Println(user1, user2, user3)
// 一般用来定义全局变量
var (
name1 string = "fu1"
name2 string = "fu2"
name3 string = "fu3"
num1 int8 = 10
num2 int8 = 20
)
fmt.Println(name1, name2, name3, num1, num2)
}
匿名变量的定义和用途
package main
import (
"fmt"
)
func a() (int, bool) {
return 0, false
}
func main() {
var _ int // 匿名变量,声明后不强制使用
_, ok := a()
if ok {
// do
}
}
变量的作用域
-
- 全局作用域
-
- 局部作用域