Go 语言数据类型详解
                           
天天向上
发布: 2025-03-25 23:35:03

原创
249 人浏览过

Go 语言是一种静态类型语言,在编译时就会对变量的类型进行检查和绑定。数据类型可分为基本类型、复合类型、引用类型和接口类型。本文将详细讲解 Go 语言的数据类型及其使用方法。


1. 基本数据类型(Primitive Types)

Go 语言提供了一些基础数据类型:

  • 整数类型intuintint8uint8int16uint16int32uint32int64uint64
  • 浮点类型float32float64
  • 复数类型complex64complex128
  • 布尔类型bool
  • 字符串类型string
  • 字节类型byte(等价于 uint8)、rune(等价于 int32,用于 Unicode 字符)

(1)整数类型

var a int = 100
var b uint = 200
var c int8 = 127
var d uint16 = 65535
  • intuint:默认根据系统架构(32 位或 64 位)选择 int32int64
  • int8/uint8:8 位整数,int8 范围 -128~127uint8 范围 0~255
  • int16/uint16int32/uint32int64/uint64:更大范围的整数。

(2)浮点类型

var f1 float32 = 3.14
var f2 float64 = 3.1415926535
  • float32:精度较低,约 6-7 位小数。
  • float64:高精度,约 15-16 位小数(默认)。

(3)复数类型

var c1 complex64 = complex(1, 2)  // 1 + 2i
var c2 complex128 = complex(3, 4) // 3 + 4i
  • complex64 由两个 float32 组成。
  • complex128 由两个 float64 组成。

(4)布尔类型

var flag bool = true
  • 只能取 truefalse,默认值 false

(5)字符串类型

var s string = "Hello, Go!"
fmt.Println(len(s)) // 获取字符串长度
  • Go 语言的字符串是不可变的,可以使用 + 连接。

多行字符串:

s := `This is 
a multi-line string`

(6)字节类型

var b1 byte = 'A'  // 等价于 uint8
var r rune = '国'  // 等价于 int32
fmt.Println(b1, r) // 65 22269
  • byte:存储 ASCII 字符。
  • rune:存储 Unicode 字符。

2. 复合数据类型(Composite Types)

(1)数组(Array)

var arr [5]int = [5]int{1, 2, 3, 4, 5}
fmt.Println(arr[0]) // 访问元素
  • 数组长度是固定的。

(2)切片(Slice)

s := []int{1, 2, 3}
fmt.Println(s[:2]) // [1, 2]
s = append(s, 4)   // 动态扩展
  • 切片是对数组的动态引用

(3)Map(字典)

m := map[string]int{"Alice": 90, "Bob": 85}
fmt.Println(m["Alice"])
m["Tom"] = 88
  • map[KeyType]ValueType 形式。

(4)结构体(Struct)

type Person struct {
    Name string
    Age  int
}
p := Person{"Alice", 25}
fmt.Println(p.Name)
  • struct 是 Go 语言自定义数据类型

3. 引用类型(Reference Types)

(1)指针(Pointer)

var p *int
num := 100
p = &num
fmt.Println(*p) // 100
  • *T 表示指向 T 类型的指针。
  • & 取地址,* 解引用。

(2)接口(Interface)

type Speaker interface {
    Speak()
}

type Dog struct{}

func (d Dog) Speak() {
    fmt.Println("Woof!")
}

var s Speaker = Dog{}
s.Speak()
  • interface{}泛型类型,可存储任何值。

4. 特殊数据类型

(1)空接口 interface{}

var i interface{} = "Hello"
fmt.Println(i) // Hello
  • 空接口可存储任意类型的数据。

(2)nil

var p *int = nil
var m map[string]int = nil
  • nil 代表未初始化的引用类型(指针、map、slice、channel、interface)。

5. 类型转换

Go 语言不支持隐式类型转换,需要显式转换:

var a int = 100
var b float64 = float64(a)  // int 转 float64
var c string = strconv.Itoa(a) // int 转 string

常见转换:

源类型目标类型转换方法
int -> float64float64(i)
float64 -> intint(f)
int -> stringstrconv.Itoa(i)
string -> intstrconv.Atoi(s)

6. 参考资料

发表回复 0

Your email address will not be published. Required fields are marked *