Skip to content

变量和输入输出

参考资料:

1、变量定义

1.1.变量定义

看下面的例子:

go
// main 包才能执行函数
func main() {
	// 先定义,再赋值
	var name string
	name = "coco cola" // go 中,声明的变量,必须使用,否则报错:Unused variable 'name'
	fmt.Println(name)

	// 声明变量的时候就赋值
	var name1 string = "pepsi cola"
	fmt.Println(name1)

	// 但是其实,声明的时候,可以省略类型,由赋的值直接推断是什么类型
	var name2 = "diet coke"
	fmt.Println(name2)

	// 短声明符号赋值
	name3 := "zero coke"
	fmt.Println(name3)
}

如果一个变量定义了,但是没有赋值,那么这个变量的值就是这个类型的 "零值"

1.2.全局变量与局部变量

定义在函数体(包括main函数)内的变量都是局部变量,定义了就必须使用。

定义在外部的变量就是全局变量,可以只定义不使用。

go
package main

import "fmt"

var userName = "枫枫知道" // 可以不使用

func main() {
  // var 变量名 类型 = "变量值"
  var name = "枫枫"
  // 在函数体内定义的变量,必须要使用
  fmt.Println(name)
}

1.3.定义多个变量

go
package main

func main() {
  var name1, name2, name3 string // 定义多个变量

  var a1, a2 = "枫枫", "知道" // 定义多个变量并赋值
  
  a3, a4 := "枫枫", "知道" // 简短定义多个变量并赋值
}

var (
  name     string = "枫枫"
  userName        = "枫枫知道"
)

1.4.定义常量

常量在定义的时候就要赋值,赋值之后就不能再修改了。

go
const name string = "枫枫" // 定义就要赋值
//name = "知道" // 不能再修改了
fmt.Println(name)

1.5.命名规范

首字母大写的变量、函数、方法、属性,可在包外进行访问。

2、输入输出

go
func main() {
	// 自动换行,中间有空格
	fmt.Println("cola", 12)

	// %s string类型的占位符 \n 是换行符
	fmt.Printf("%s is a boy\n", "bob")
	fmt.Printf("%s is a boy\n", "bob")
	// %d 整数
	fmt.Printf("%d\n", 3)
	// %.2f 保留2位小数(四舍五入)
	fmt.Printf("%.2f\n", 1.2562)
	// 打印空字符串
	fmt.Printf("%#v\n", "")

	// 输入
	var name2 string
	fmt.Scan(&name2) // 这里记住,要在变量的前面加个&, 后面讲指针会提到
	fmt.Println("你输入的名字是", name2)
}

3、基本数据类型

go 语言的基本数据类型有:整数型、浮点型、复数、布尔、字符串。

3.1.整数型

go语言的整数类型,具体细分有很多:

go
func main() {
	var n1 uint8 = 2 // 2^8
	var n2 uint16 = 2
	var n3 uint32 = 2
	var n4 uint64 = 2
	var n5 uint = 2
	var n6 int8 = 2
	var n7 int16 = 2
	var n8 int32 = 2
	var n9 int64 = 2
	var n10 int = 2

	fmt.Println(n1, n2, n3, n4, n5, n6, n7, n8, n9, n10)
}
  • 默认的数字定义类型是 int 类型
  • 带个u就是无符号,只能存正整数
  • 后面的数字就是2进制的位数
  • uint8 还有一个别名 byte, 一个字节 = 8个bit位
  • int类型的大小取决于所使用的平台,64位操作系统,int就是int64的最大上限

3.2.浮点型

Go语言支持两种浮点型数:float32 和 float64

  • float32 的浮点数的最大范围约为 3.4e38,可以使用常量定义:math.MaxFloat32
  • float64 的浮点数的最大范围约为 1.8e308,可以使用一个常量定义:math.MaxFloat64

如果没有显式声明,则默认是 float64

3.3.字符型

比较重要的两个类型是 byte(单字节字符)、 rune (多字节字符)。

go
func main() {
	var c1 = 'a'
	var c2 = 97
	fmt.Println(c1, c2)           // 直接打印都是数字
	fmt.Printf("%c %c\n", c1, c2) // 以字符的格式打印

	var r1 rune = ''
	fmt.Printf("%c\n", r1)
}
  • 字符的本质是一个整数,直接输出时,是该字符对应的 UTF-8 编码的码值
  • 可以直接给某个变量赋一个数字,然后按格式化输出时 %c ,会输出该数字对应的 unicode 字符
  • 字符类型是可以进行运算的,相当于一个整数,因为它都对应有 Unicode 码

3.4.字符串类型

字符的赋值是单引号,字符串的赋值是双引号

go
var s string = "枫枫知道"
fmt.Println(s)

3.5.转义字符

go
fmt.Println("枫枫\t知道")              // 制表符
fmt.Println("枫枫\n知道")              // 回车
fmt.Println("\"枫枫\"知道")            // 双引号
fmt.Println("枫枫\r知道")              // 回到行首
fmt.Println("C:\\pprof\\main.exe") // 反斜杠

3.6.多行字符串

go
package main

import "fmt"

func main() {
  var s = `今天
天气
真好
`
  fmt.Println(s)
}

在 `` 这个里面,再出现转义字符就会原样输出了

3.7.布尔类型

布尔型数据只有 true(真)和 false(假)两个值

  • 布尔类型变量的默认值为false
  • Go 语言中不允许将整型强制转换为布尔型
  • 布尔型无法参与数值运算,也无法与其他类型进行转换

3.8.零值问题

如果给一个基本数据类型只声明不赋值,那么这个变量的值就是对应类型的零值,例如 int 就是 0,bool 就是 false,字符串就是 "" 。

go
func main() {
	var a1 int
	var a2 float32
	var a3 string
	var a4 bool

	fmt.Printf("%#v\n", a1) // 0
	fmt.Printf("%#v\n", a2) // 0
	fmt.Printf("%#v\n", a3) // ""
	fmt.Printf("%#v\n", a4) // false
}