go 基础总结 --- 数据类型
go 是静态类型语言, 意味着:
- 在声明变量的时候需要指明变量类型
- 一旦声明将不再改变
浮点型
var a, b float32 = 3.4, 4.5
在函数内部, 也可以不声明, 因为 go 在编译时, 可以根据赋值自动识别变量类型, 此时的书写规则是, 去掉 var
, 赋值符号改为 :=
a, b := 3.4, 4.5
Tips:
在不指明变量类型时, 对于浮点型变量, go 默认为 float64, 而不是 float32. 因此在下面的例子中就会报错:
package main
import ("fmt")
func add(x,y float32) float32 {
return x + y
}
func main() {
var num1, num2 float32 = 3.4, 4.5
fmt.Println(add(num1, num2))
}
从下面的报错信息可以看出, num1 和 num2 被声明为 float64 类型, 所以这种情况, 必须在声明时指明变量类型了.# command-line-arguments
./new.go:13:17: cannot use a (type float64) as type float32 in argument to add
./new.go:13:17: cannot use b (type float64) as type float32 in argument to add
字符串类型
注意点在注释里标明:
// 返回值的类型不能简写 / 省略, 有几个返回值, 就要写几个
func multiple(a, b string) (string, string) {
return a, b
}
func main() {
// 字符串必须用双引号, 不能用单引号, 用单引号就变成 rune 类型了
str1, str2 := "Hello", "World"
fmt.Println(multiple(str1, str2))
}
关于 rune 类型目前理解到的是:
字符串中得每一个元素叫做 "字符". 在遍历或单个获取字符串元素时可以获得字符. Go 语言的字符有以下两种:
- 一种是 unit8 类型, 或者叫 byte 型, 代表了 ASCII 码的一个字符.
- 另一种是 rune 类型, 代表一个 UTF-8 字符. 当需要处理中文, 日文或其他复合字符时, 则需要用到 rune 类型. rune 类型实际是一个 int32.
var a byte = 'a'
fmt.Printf("%d %T\n", a, a) // 输出 97 uint8
var b rune = '你'
fmt.Printf("%d %T\n", b, b) // 输出 20320 int32
数据类型转换
var a int = 89
// 数据类型转换方式
var b float32 = float32(a)
x := a
fmt.Printf("%d %T\n", x, x) // 查看 x 的数据类型, 输出为 89 int
fmt.Printf("%d %T\n", a, a) // 查看 a 的数据类型, 输出为 89 int
fmt.Printf("%f %T\n", b, b) // 查看 b 的数据类型, 输出为 89.000000 float32
从上面的输出可以看出类型转换函数并不会改变原变量的类型, 体现 go 为静态类型语言的特点.
以上, 没有面面俱到, 按部就班的罗列基础语法, 只记录我认为容易出错的点.
本作品采用《CC 协议》,转载必须注明作者和本文链接