【入门】Go语言变量详解

一、变量赋值的几种方式

1.1 声明单个变量

语法:

var name type
  • name:变量名称
  • type:变量类型

案例:

package main

func main() {
	var name string
	var age uint
}

1.2 声明多个变量

语法:

var name1,name2 int

案例:

package main

func main() {
	var num1,num2 int
}

1.3 初始化变量

在声明变量时对其进行赋值。
案例:

package main

import "fmt"

func main() {
	var name string = "qinzt"
	var age uint = 22
	// 多变量初始化值
	var height, weight = 1.78, 60.4
	fmt.Printf("姓名:%v 年龄:%d 身高:%.2f 体重%.2f", name, age, height, weight)
}

代码输出结果:

姓名:qinzt 年龄:22 身高:1.78 体重60.40

1.4 变量赋值

在定义变量后,再给变量赋值,也就是先声明后赋值。
案例:

package main

import "fmt"

func main() {
	var name string
	var age uint
	name = "qinzt"
	age = 22
	fmt.Println(name, age)
}

代码输出结果:

qinzt 22

1.5 自动推导类型方式声明变量

自动推到类型:在声明变量时不需要 var变量类型 其变量类型是变量值来决定的。
语法:

name := value
  • name:变量名称
  • value:变量值
    案例:
package main

import "fmt"

func main() {
	name := "qinzt"
	age := 22

	// 自动推导类型,多变量初始化
	height, weight := 1.78, 60.4
	fmt.Println(name, age, height, weight)
}

代码输出内容:

qinzt 22 1.78 60.4

二、输出输入格式控制

2.1 输出格式

输出常使用 fmt.Printlnfmt.Printf

  • fmt.Println:会在输出的内容末尾添加一个换行符
  • fmt.Printf:格式化字符串来输出内容,可以控制输出的格式和精度

案例:

package main

import "fmt"

func main() {
	name := "qinzt"
	age := 22
	height, weight := 1.78, 60.4

	fmt.Println(name, age, height, weight)
	fmt.Printf("姓名:%v 年龄:%v 身高:%.2f 体重:%.2f", name, age, height, weight)
}
  • %v: 值的默认格式表示
  • %.2f: 输出浮点类型,.后面2位

代码输出内容:

qinzt 22 1.78 60.4
姓名:qinzt 年龄:22 身高:1.78 体重:60.40

2.1 输入格式

输出常使用 fmt.Scan 可以接受输入的内容将其赋值给变量
案例:

package main

import "fmt"

func main() {
	var name string
	var age int
	fmt.Println("请输入您的姓名:")
	fmt.Scan(&name)
	fmt.Println("请输入您的年龄:")
	fmt.Scan(&age)
	fmt.Printf("姓名:%v 年龄:%v", name, age)
}

代码输出内容:

请输入您的姓名:
qinzt
请输入您的年龄:
22
姓名:qinzt 年龄:22

2.3 输出变量对应的地址

在内存中变量会开辟对应的存储单元,为了能够找到该存储单元对应数据,系统会给每个单元加上一个编号,这个编号就是变量的地址
案例:

package main

import "fmt"

func main() {
	var name string
	var age int
	fmt.Println(&name, &age)
	fmt.Printf("%p %p", &name, &age)
}

代码输出内容:

0xc000050270 0xc000018098
0xc000050270 0xc000018098

三、变量数据类型

3.1 整形类型

整形分为两类,分别是 有符号整数无符号整数

  • 有符号:既可以表示负数、也可以表示整数、也可以表示零
  • 无符号:只能是正整数

1)有符号整数

类型 有无符号 占用存储空间 表数范围
int8 1字节 -128~127
int16 2字节 -32768~32767
int32 4字节 -2147483648~2147483647
int64 8字节 -9223372036854775808~9223372036854775807

2)无符号整数

类型 有无符号 占用存储空间 表数空间
uint8 1字节 0~255
uint16 2字节 0~65535
uint32 4字节 0~4294967295
uint64 8字节 0~18446744073709551615

3)其他整数类型

类型 有无符号 占用存储空间
int 32位系统占4字节,64位系统占8字节
uint 32位系统占4字节,64位系统占8字节
rune 等价于init32
byte 等价于unit8

3.2 浮点类型

浮点类型底层存储:包括float32float64存储小数,会丢失精度

  • float32:精确到小数点后7位
  • float64:精确到小数点后15位
类型 存储空间 表数范围
float32 4字节 -3.403E38~3.403E38
float64 8字节 -1.798E308~1.798E308

3.3 布尔类型

布尔类型变量只有两种结构,True、False、默认值是False

案例:

package main

import "fmt"

func main() {
	var isEnable bool
	fmt.Println(isEnable)
	fmt.Printf("%t %T", isEnable, isEnable)
}
- %t:输出布尔类型
- %T:输出变量类型

代码输出结果:

false
false bool

3.4 字符类型

字符类型变量使用 byte类型定义,单个引号引起的单个字符为字符类型,字符类型默认以ASCII码格式。

案例:

package main

import "fmt"

func main() {
	var ch byte = 'A'
	fmt.Println(ch)
	fmt.Printf("%c %d", ch, ch)
}
  • %c:字符串输出,不以ASCII输出
  • %d:十进制整数输出,以ASCII输出

代码输出结果:

65
A 65

3.5 字符串类型

  • 字符串类型变量使用 string类型定义
  • 变量值需要使用双引号引用
  • 字符串结束符是 "\0" 这个我们是看不到的
  • 在Go语言中,一个汉字占3字符

案例:

package main

import "fmt"

func main() {
	var name string = "欲情故纵"
	fmt.Printf("%s %d\n", name, len(name))
	name = "qinzt"
	fmt.Printf("%s %d", name, len(name))
}

代码输出内容:

欲情故纵 12
qinzt 5

四、拓展

4.1 强制类型转换

  • 类型转换用于将一种数据类型,转换成另一种数据类型。
  • 在转换时,建议将低类型转换成高类型,保证数据精度。
  • 如果高类型转换低类型,可能会丢失精度,或者出现移除。

案例:

package main

import "fmt"

func main() {
	var num1 int = 100
	var num2 float32 = 200

	// 将num1转换成int64类型
	fmt.Printf("%d\n", int64(num1))
	// 将num2转换float64类型
	fmt.Printf("%.2f", float64(num2))
}

代码执行结果:

100
200.00

4.2 fmt.Printf格式化输出

- %d:十进制整数
- %f:浮点数
- %s:字符串
- %t:布尔值
- %v:任何值的默认格式表示
- %p:指针的十六进制表示
- %b:二进制表示
- %o:八进制表示
- %x:十六进制表示(小写字母)
- %X:十六进制表示(大写字母)
- %e:科学计数法表示(小写字母 e)
- %E:科学计数法表示(大写字母 E)
- %c:Unicode 字符
- %q:带引号的字符串
- %%:百分号本身
posted @ 2023-03-25 13:52  乱七八糟博客备份  阅读(84)  评论(0编辑  收藏  举报