Golang中的变量学习小结

2019-11-10 12:14:19丽君

我们定义的变量可以在函数内也可以在函数外,在函数外部定义的变量并不是全局变量,应该是叫做包内变量,因为是在一个包下面。

定义一个变量:

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()
}