为什么需要变量
- 一个程序就是一个世界
- 变量是程序的基本组成单位
package main
import "fmt"
func getVal(num1 int, num2 int) (int, int) {
sum := num1 + num2
sub := num1 - num2
return sum, sub
}
func main() {
sum, sub := getVal(30,60)
fmt.Println("sum=", sum, "sub=", sub)
sum2, _ := getVal(10,30) //只取出第一个返回值
fmt.Println("sum=", sum2)
}
变量概念
变量相当于内存中一个数据存储空间的表示,可以把变量看作是一个房间的门牌号,通过门牌号可以找到房间,同理,通过变量名可以访问到变量值
变量使用
- 声明变量(也叫:定义变量)
- 变量赋值
- 使用变量
package main
import "fmt"
func main() {
//定义变量/声明变量
var i int
//给i赋值
i = 10
//使用变量
fmt.Println("i=", i)
}
变量使用注意事项
- 变量表示内存中的一个存储区域
- 该区域有自己的名称( 变量名 ) 和 类型( 数据类型 )
golang变量使用的方式
- 指定变量类型,声明后若不赋值,使用默认值
package main
import "fmt"
func main() {
//指定变量类型,声明后若不赋值,使用默认值
// int 默认值为 0
var i int
fmt.Println("i=", i)
}
- 根据值自行判定变量类型( 类型推导 )
package main
import "fmt"
func main() {
// 根据值自行判定变量类型( 类型推导 )
var num = 10.11
fmt.Println("num=", num)
}
- 省略var,注意 := 左侧的变量不应该是已经声明过的,否则回导致编译错误
package main
import "fmt"
func main() {
// 省略var :=左侧的变量不应该是已经声明过的,否则回导致编译错误
// := 的 :不能省略,否则编译错误
//下面的方式等价 var name string name = "tom"
name := "tom"
fmt.Println("name=", name)
}
- 多变量声明
package main
import "fmt"
func main() {
//一次性声明多个变量
var n1, n2, n3 int
fmt.Println("n1=", n1, "n2=", n2, "n3=", n3)
}
package main
import "fmt"
func main() {
//一次性声明多个变量方式2
var n1, name, n3 = 100, "tom", 888
fmt.Println("n1=", n1, "name=", name, "n3=", n3)
}
package main
import "fmt"
func main() {
//一次性声明多个变量方式3
n1, name, n3 := 100, "tom", 888
fmt.Println("n1=", n1, "name=", name, "n3=", n3)
}
- 一次性声明多个全局变量( 在go中函数外部定义变量就是全局变量 )
package main
import "fmt"
//定义全局变量
var n1 = 100
var n2 = 200
var name = "jack"
//一次性声明
var (
n3 = 300
n4 = 900
name2 = "mary"
)
func main() {
fmt.Println("n1=", n1, "n2=", n2, "name=", name, "n3=", n3, "n4=", n4, "name2=", name2)
}
- 同区域的数据值可以在同一类型范围内不断变化( 很重要 )
package main
import "fmt"
func main() {
var i int = 10
i = 30
i = 50
fmt.Println("i=", i)
}
-
变量=变量名+值+数据类型, 变量三要素
-
golang的变量如果没有赋初值,编译器会使用默认值
- int 默认值 0
- string 默认值 空串
- 小数 默认值 0
变量的声明 初始化 赋值
- 声明变量
var 变量名 数据类型
var a int
var num1 float32
- 初始化变量
在声明变量时就给值
var a int = 45
var b = 400
- 变量赋值
var num int
num = 30
程序中 + 号的使用
- 当左右两边都是数值型时,则做加法运算
- 当左右两边都是字符串,则做字符串拼接
package main
import "fmt"
func main() {
var i = 1
var j = 2
var r = i + j
fmt.Println("r=", r)
var str1 = "hello "
var str2 = "world"
var res = str1 + str2
fmt.Println("res=", res)
}
标识符的命名规范
标识符概念
- golang对各种变量, 方法, 函数等命名时使用的字符序列称为标识符
- 凡是自己可以起名字的地方都叫标识符
标识符的命名规则
- 由26个英文字母大小写, 0-9, _ 组成
- 数字不能开头
- golang中严格区分大小写
- 下划线 _ 本身在go中是一个特殊的标识符,称为空标识符 可以代表任何其它的标识符,但是它对应的值会被忽略(比如: 忽略某个返回值) 所以仅能被作为占位符使用,不能作为标识符使用
- 不能以系统保留关键字作为标识符(一共有25个)
标识符命名注意事项
- 包名: 保持package的名字和目录尽量保持一致,尽量采取有意义的包名,简短,有意义,不要和标准库冲突
- 变量名, 函数名, 常量名: 采用驼峰法
var stuName string = "tom"
var goodPrice float32 = 1234.5
- 如果变量名,函数名,常量名首字母大写,则可以被其它的包访问;
如果首字母小写,则只能在本包中使用(注: 可以简单的理解成,首字母大写是公开的(public),首字母小写是私有的(private))
在golang没有public, private 等关键字
main.go
package main
import (
"fmt"
"go_code/project01/model"
)
func main() {
var i int = 10
i = 30
fmt.Println("i=", i)
// utils.go 的HeroName 包名.标识符
fmt.Println(model.HeroName)
}
utils.go
package model
var HeroName string = "五行"
系统保留关键字
1 | 2 | 3 | 4 | 5 |
---|---|---|---|---|
break | default | func | interface | select |
case | defer | go | map | struct |
chan | else | goto | package | switch |
const | fallthrough | if | range | type |
continue | for | import | return | var |
系统的预定义标识符
1 | 2 | 3 | 4 | 5 | 6 |
---|---|---|---|---|---|
append | bool | byte | cap | close | complex |
complex64 | complex128 | uint16 | copy | false | float32 |
float64 | imag | int | int8 | int16 | uint32 |
int32 | int64 | iota | len | make | new |
nil | panic | uint64 | println | real | |
recover | string | true | uint | uint8 | uintprt |