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 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!