go中的变量和类型(附代码实例)

79 阅读3分钟

在Go中,我们使用var 来定义变量:

var age = 20

变量可以在包一级定义:

package main

import "fmt"

var age = 20

func main() {
	fmt.Println("Hello, World!")
}

或在一个函数内:

package main

import "fmt"

func main() {
	var age = 20

	fmt.Println("Hello, World!")
}

在包一级定义的变量,在组成包的所有文件中都是可见的。一个包可以由多个文件组成,你只需要创建另一个文件并在顶部使用相同的包名。

在函数级定义的变量只在该函数中可见。它在函数被调用时被初始化,并在函数结束执行时被销毁。

在我们使用的例子中:

var age = 20

我们把数值20 赋给age

这使得Go确定变量age类型int

我们以后会看到更多关于类型的内容,但是你应该知道有很多不同的类型,从int,string,bool

我们也可以声明一个没有现存值的变量,但在这种情况下,我们必须像这样设置类型:

var age int
var name string
var done bool

当你知道值的时候,你通常使用短的变量声明与:= 操作符。

age := 10
name := "Roger"

对于变量的名称,你可以使用字母、数字和下划线_ ,只要名称以一个字符或_

名称是区分大小写的

如果名字很长,通常会使用camelCase,所以为了表示汽车的名字,我们使用carName

你可以用赋值运算符给一个变量赋一个新的值=

var age int
age = 10
age = 11

如果你有一个在程序中永不改变的变量,你可以用const ,将其声明为常量:

const age = 10

你可以在一行中声明多个变量:

var age, name

并对它们进行初始化:

var age, name = 10, "Roger"

//or

age, name := 10, "Roger"

声明的变量如果在程序中没有使用,会引起错误,程序不会被编译。

你会在VS Code中看到一个警告。

Screen Shot 2022-07-28 at 15.45.31.png

和来自编译器的错误:

Screen Shot 2022-07-28 at 15.45.44.png

如果你声明了一个变量而没有初始化它的值,它就会自动分配一个取决于类型的值,例如整数是0 ,字符串是空字符串。

Go是一种类型化的语言。

我们看到了如何声明一个变量并指定其类型:

var age int

或者让Go从分配的初始值中推断出其类型:

var age = 10

Go中的基本类型是:

  • 整数 (int,int8,int16,int32,rune,int64,uint,uintptr,uint8,uint16,uint64)
  • Floats (float32,float64), 对表示小数很有用
  • 复数类型 (complex64,complex128), 在数学上很有用
  • 字节 (byte), 代表一个ASCII字符
  • 字符串 (string),是一组byte
  • 布尔型 (bool),表示真或假。

我们有很多不同的类型来表示整数,你大多数时候都会使用int ,你可能会选择一个更专业的类型来进行优化(这不是你刚开始学习时需要考虑的问题)。

一个int 类型在64位系统上使用时将默认为64位,在32位系统上为32位,以此类推。

uint 是一个 ,是无符号的,如果你知道这个数字不会是负数,你可以用它来加倍你可以存储的数值。int

以上所有的基本类型都是值类型,这意味着它们在作为参数传递给函数时,或从函数返回时,都是以值传递的。