变量
go 中的变量使用 var 关键字创建,语法格式为var 变量名 变量类型,如下:
var a int
该代码创建了一个 int 类型的变量,名字叫a。
与其他语言相同,go语言也支持在创建时赋值,这一动作也叫初始化。初始化本身也值得拿出来讲一讲,但这篇文章不讲。
var a = 1//这种叫初始化
//也可以一次初始化多个值
var b, c = false, "AMDYES!"
a = 2//这种叫赋值
此外,go提供了一种快速创建变量的方式,我并不知道应该叫他什么,姑且叫他声明赋值吧。如下:
func text(){
a := 1//声明的同时赋值
}
这种语法必须在函数内才能使用,这个牵扯到另外一个概念就是全局变量,待会写。要注意的是 := 只能声明出变量,常量无法用这个来进行声明。
如果你没有为变量赋值,那么一般情况下,变量默认值是零值,这个零值因数据类型而定,可能是0也可能是nil
go语言也可以批量声明变量,如下:
var (
v1 int
v2 int = 2
v3 = 3
)
这是批量声明的语法,他支持声明与初始化
常量
常量的语法是const 变量名 变量类型,和变量语法相似,而且初始化等操作也是一模一样的。这里唯一值得一提的功能就是iota,他是用在批量声明中的,像这样:
const(
a int = iota
b = iota
c = iota
)
他们分别就被赋值为了0、1、2
注意,iota不会被中断,也不会从其他值开始计数,只会从零值开始,每多一个批量声明的变量,就多加一。如下:
const (
a int = iota
b = 2
c = iota
d = iota
e = 1
f = iota
)
fmt.Println(a, b, c, d, e, f)
// 0 2 2 3 1 5
他不会因为你中间手动赋值个2,就会重新开始从2开始计数。
全局变量
全局变量其实就是在函数之外声明的变量,这些变量可以被同一个文件下的所有函数调用:
package main
import "fmt"
var a = 100
func main() {
fmt.Println(a)
}
这里的a就是一个全局变量。 同样的,除了有能在一个文件中使用的全局变量,也有可以全项目使用的变量,就是全局跨包变量。但是注意,如果想跨包引用,变量名首字母必须大写,如下:
var Version int = 2
类型转换
go 中的类型转换方式为 T(变量) ,T代表一种变量类型 如下:
var a int = 1
var b = float64(a)
go也有自动类型推导,go 的类型推导会在你声明变量时不指定变量类型时触发。它会根据右边表达的结果类型来确定变量的类型,如下:
var a int =1
b := a//b的类型推导为int
c := 1//此时c被推导为int,也就是常数整型在 go 中为 int
d := 1.1//此时d被推导为float64
e := 1 + 1i//此时为complex128
变量类型
整型
| 名称 | 长度 | 范围 |
|---|---|---|
| int8 | 8bit | -128 ~ 127 |
| uint8 | 8bit | 0 ~ 255 |
| int16 | 16bit | -32768 ~ 32767 |
| uint16 | 16bit | 0 ~ 65536 |
| int32 | 32bit | |
| uint32 | 32bit | |
| int64 | 64bit | |
| uint64 | 64bit | |
| int | 32 / 64bit | |
| uint | 32 / 64bit |
浮点型
var f2 float32 = 2.34
字符型
const (
c1 byte = 65
c2 = 'a'
c3 rune = '中'
)
布尔型
关键字bool
字符串
关键字string
函数
go 中定义函数需要使用 func 关键字
参数
go 的函数可以没有参数,也可以有多个参数,如下:
func novar(){
}
func manyvar(a int, b int){
}
如果参数类型一致可以只写最后一个参数的类型,如下:
func manyvar(a,b int){
}
返回值
go 函数如果有返回值需要在参数后面声明,如下:
func havereturn() int{
}
它将返回一个 int 类型的返回值
返回值也可以有一个指定的名字,其目的是为了增加代码的可读性,如下:
func sum(a, b int) (ans int){
ans = a + b
return ans
}
如果一个函数十分的长,那么在开始就确定返回值的名字将大大增加可读性
go 支持函数返回多个返回值,如下:
func manyres() (int, error){
return 1 , nil
}
它分别返回了int和error类型两个返回值