Go-变量、数据类型分类

1 变量的定义

  1. 变量表示内存中的一个存储区域,该区域有自己的名称(变量名)和类型(数据类型)
  2. 变量可以看做是一个房间的门牌号,通过门牌号我们可以找到房间(数据在房间里),房间的类型就是(数据类型),通过变量名可以访问到变量(值)。

2 变量的注意事项

  1. 变量三要素:变量名, 数据类型, 值
  2. 变量在同一个作用域内不能重名,不能重复声明,声明后赋值必须严格按照声明的类型赋值
  3. 变量名应由英文大小写字母,数字和下划线组成,且必须由英文字母开头
  4. 变量的命名严格区分英文字母大小写
  5. Golang的变量如果没有赋初值,编译器会使用默认值,比如int默认值是0,string的默认值是空串
  6. Golang的变量如果没有指定数据类型,Golang会根据值自行判定变量类型(类型推导)

3 变量的使用步骤

3.1 变量的一般使用步骤

package main

import "fmt"

func main() {
	//变量的声明
	var age int
	//变量的赋值
	age = 25
	//变量的使用
	fmt.Println("my age is ", age)
}


-----------------输出

PS C:\Goproject> cd .\src\gocode\project01\main\
PS C:\Goproject\src\gocode\project01\main> go run .\var.go
var.go:1:1: expected 'package', found 'EOF'      #需要CTRL+s保存代码
PS C:\Goproject\src\gocode\project01\main> go run .\var.go
my age is  25
PS C:\Goproject\src\gocode\project01\main> 

3.2 变量的声明并赋值

package main

import "fmt"

func main() {
	//变量的声明+赋值
	var age int = 25
	//变量的声明+赋值:=简短格式
	height := 175
	//变量的使用
	fmt.Println("my age is ", age)
	fmt.Println("my height is ", height)
}

-------------------输出
PS C:\Goproject\src\gocode\project01\main> go run .\var.go
my age is  25
my height is  175
PS C:\Goproject\src\gocode\project01\main> 

3.3 多变量声明+赋值

package main

import "fmt"

func main() {
	//一次性声明多个变量
	var age, height int = 25, 175
	//变量的使用
	fmt.Println("my age is ", age)
	fmt.Println("my height is ", height)
}

----------------输出
PS C:\Goproject\src\gocode\project01\main> go run .\var.go
my age is  25
my height is  175
PS C:\Goproject\src\gocode\project01\main> 
package main

import "fmt"

func main() {
	//一次性声明多个变量
	var age, height, name = 25, 175, "du-z"
	//变量的使用
	fmt.Println("my age is ", age)
	fmt.Println("my height is ", height)
	fmt.Println("my name is ", name)
}

-------------------输出
PS C:\Goproject> cd .\src\gocode\project01\main\
PS C:\Goproject\src\gocode\project01\main> go run .\var.go
my age is  25    
my height is  175
my name is  du-z
PS C:\Goproject\src\gocode\project01\main> 

4 变量作用域

4.1 局部变量

  1. 在函数体内声明的变量称之为局部变量,它们的作用域只在函数体内,函数的参数和返回值变量都属于局部变量。
  2. 局部变量不是一直存在的,它只在定义它的函数被调用后存在,函数调用结束后这个局部变量就会被销毁。

示例局部变量 a、b、c


package main
import (
    "fmt"
)
func main() {
    //声明局部变量 a 和 b 并赋值
    var a int = 3
    var b int = 4
    //声明局部变量 c 并计算 a 和 b 的和
    c := a + b
    fmt.Printf("a = %d, b = %d, c = %d\n", a, b, c)
}

---------------运行结果

a = 3, b = 4, c = 7

4.2 全局变量

  1. 在函数体外声明的变量称之为全局变量,全局变量只需要在一个源文件中定义,就可以在所有源文件中使用,当然,不包含这个全局变量的源文件
  2. 需要使用“import”关键字引入全局变量所在的源文件之后才能使用这个全局变量
  3. 全局变量声明必须以 var 关键字开头,如果想要在外部包中使用全局变量的首字母必须大写

示例全局变量 c。

package main
import "fmt"
//声明全局变量
var c int
func main() {
    //声明局部变量
    var a, b int
    //初始化参数
    a = 3
    b = 4
    c = a + b
    fmt.Printf("a = %d, b = %d, c = %d\n", a, b, c)
}

-----------运行结果

a = 3, b = 4, c = 7

Go语言程序中全局变量与局部变量名称可以相同,但是函数体内的局部变量会被优先考虑

package main
import "fmt"
//声明全局变量
var a float32 = 3.14
func main() {
    //声明局部变量
    var a int = 3
    fmt.Printf("a = %d\n", a)
}

------------------运行结果

a = 3

4.3 形式参数

  1. 在定义函数时函数名后面括号中的变量叫做形式参数(简称形参)。
  2. 形式参数只在函数调用时才会生效,函数调用结束后就会被销毁,在函数未被调用时,函数的形参并不占用实际的存储单元,也没有实际值。
  3. 形式参数会作为函数的局部变量来使用。

示例形式参数 a 和 b

package main
import (
    "fmt"
)
//全局变量 a
var a int = 13
func main() {
    //局部变量 a 和 b
    var a int = 3
    var b int = 4
    fmt.Printf("main() 函数中 a = %d\n", a)
    fmt.Printf("main() 函数中 b = %d\n", b)
    c := sum(a, b)
    fmt.Printf("main() 函数中 c = %d\n", c)
}
func sum(a, b int) int {
    fmt.Printf("sum() 函数中 a = %d\n", a)
    fmt.Printf("sum() 函数中 b = %d\n", b)
    num := a + b
    return num
}

----------------运行结果

main() 函数中 a = 3
main() 函数中 b = 4
sum() 函数中 a = 3
sum() 函数中 b = 4
main() 函数中 c = 7

5 匿名变量

5.1 什么是匿名变量

  1. 在Go语言中,匿名变量就是没有名字的变量;
  2. 匿名变量不占用内存空间,不会分配内存,匿名变量与匿名变量之间也不会因为多次声明而无法使用。
  3. 匿名变量的特点是一个下画线“”,“”本身就是一个特殊的标识符,可以像其他标识符那样用于变量的声明或赋值,但任何赋给这个标识符的值都将被抛弃,因此这些值不能在后续的代码中使用,也不可以使用这个标识符作为变量对其它变量进行赋值或运算。
  4. 它可以被视为一个占位符,表示我们对该值不感兴趣或不需要使用。

5.2 使用匿名变量

忽略函数返回值:

func getData() (string, int) {
    // 假设这是一个函数返回字符串和整数的示例
    return "data", 123
}

func main() {
    _, num := getData()
    // 忽略第一个返回值
    fmt.Println("Number:", num)
}

//在上述示例中,我们使用匿名变量_来忽略函数getData的第一个返回值,因为我们只对第二个返回值感兴趣。

忽略循环中的索引或元素:

numbers := []int{1, 2, 3, 4, 5}
for _, num := range numbers {
    // 忽略索引,只使用元素值
    fmt.Println("Number:", num)
}

//在上述示例中,我们使用匿名变量_来忽略循环中的索引值,只关注切片numbers中的元素值。

忽略未使用的变量:

func main() {
    _ = 100
    // 忽略未使用的变量
}

//在上述示例中,我们使用匿名变量_来忽略未使用的变量,以避免编译器报告未使用变量的警告。

6 数据类型分类

基本数据类型
	数值型
		整数型:int、int8、int16、int32、int64、uint、uint8、uint16、uint32、uint64、byte
		浮点型:float32、float64
	布尔型(bool):true、false
	字符型(golang没有单独的字符型,使用byte来保存单个字母字符)
	字符串(string)
派生数据类型/复杂数据类型
	指针
	数组
	结构体
	管道
	函数
	切片
	接口
	map
posted @ 2023-08-22 13:50  du-z  阅读(24)  评论(0编辑  收藏  举报