我们定义的变量可以在函数内也可以在函数外,在函数外部定义的变量并不是全局变量,应该是叫做包内变量,因为是在一个包下面。
定义一个变量:
var a int这种定义方式指明了变量的类型,没有初始化,但是我们的编译器会帮你初始化为0
var a int = 16这种方式是相比上一种方式多了初始化。
var a = 12这种方式没有指定类型,但是初始化了一个值12,这种方式编译器会自动的识别是那种类型,就像python里面一样,不需要指定类型。
a := 12这种方式和上一种类似,但是更加方便,不用写前面的var了。
定义多个变量
var bb,cc uint8 = 12, 13这种方式可以定义多个相同类型的变量
var z, str = 14, "string"这种方式比上一种方式更好好用,因为这样可以同时定义多个不同类型的数据了。
n, x := 1, 2这种方式比上一种方式更加方便,不仅可以同时定义多个不同类型的变量同时不用写var关键字了。
complex 复数类型
package main
import (
"fmt"
"math/cmplx"
"math"
)
func complexVariable() {
c := 3 + 4i
fmt.Println("|3 + 4i|=",cmplx.Abs(c))
fmt.Println(cmplx.Pow(math.E, 1i * math.Pi) + 1)
fmt.Println(cmplx.Exp(1i * math.Pi) + 1)
fmt.Printf("%0.3f", cmplx.Exp(1i * math.Pi) + 1)
}
func main() {
complexVariable()
}
c := 3 + 4i,我们在定义复数的时候应该是这种形式而不是:c := 3 + 4*i,如果是这样的形式,则编译器会把这个i当作是变量处理,而不是复数标志
cmplx.Abs(c),取复数的绝对值
cmplx.Pow(math.E, 1i * math.Pi) + 1,计算e^(iπ)+1,e是数学中的自然数。
cmplx.Exp(1i * math.Pi) + 1,另外一种计算方式
fmt.Printf("%0.3f", cmplx.Exp(1i * math.Pi) + 1)格式化输出复数。
常量的定义
package main
import (
"fmt"
"math"
)
c consts() {
var filename = "1.txt"
const a, b = 3, 4
var c int = 0
c = int(math.Sqrt((a*a + b*b)))
fmt.Println(filename, c)
}
func main() {
consts()
}
Go语言中的常量是和c语言中的宏常量是一样的,本着替换的原则,所以如果在定义常量的时候编译器不用指定类型,所以在c = int(math.Sqrt((a*a + b*b)))中就不用把(a*a + b*b)强转为float64。
在定义变量的规则中对常量也是适用的,我就不多讲了,自己去实践下就知道了。
定义枚举类型
在Go语言中并没有针对枚举类型的关键字的,那Go语言是怎么定义枚举类型的呢?
package main
import "fmt"
func enums() {
const(
c = 0
cpp = 1
java = 2
python = 3
)
fmt.Println(c, cpp, java, python)
}
func main() {
enums()
}
这样我们便定义了一个枚举同时还可以使用iota关键字,表示这个枚举类型是递增的
package main
import "fmt"
func enums() {
const(
c = iota
cpp
java
python
)
fmt.Println(c, cpp, java, python)
}
func main() {
enums()
}










