GO 语言学习 之 数据类型

        go语言提供了丰富的数据类型。

1. 基本数据类型

  • 布尔类型(bool
    • 表示一个布尔值,取值为 true 或 false
    • 用于逻辑判断。
    • 示例:
    var isDone bool = true
    
  • 数字类型
    • 整数类型
      • 有符号整数:int、int8(8 位)、int16(16 位)、int32(32 位)、int64等
      • 无符号整数:uint8(8 位,也称为 byte,常用于处理字节数据)、uint16(16 位)、uint32(32 位)、uint64(64 位),以及与平台相关的 uint
      • 这这里我建议如果知道长度范围,尽量使用带长度的类型,有利于跨平台使用
      • 示例:
      var num1 int32 = 100
      var num2 uint8 = 255
      
    • 浮点类型float32(32 位)和 float64(64 位)。float64 精度更高,是 Go 语言中浮点运算的默认类型。
    • 示例:
    var pi float64 = 3.14159
    
    • 复数类型complex64(实部和虚部为 float32)和 complex128(实部和虚部为 float64)。
    • 示例:
    var c1 complex64 = 1 + 2i
    var c2 complex128 = complex(3, 4)
    
  • 字符串类型(string
    • 表示一个不可变的字节序列,通常用于存储文本。字符串使用双引号 " 或反引号 ` 定义。双引号内的字符串支持转义字符,反引号内的字符串为原生字符串,不支持转义。
    • 示例:
    var str1 string = "Hello, World!"
    var str2 string = `This is a raw string\n with no escape`
    

2. 复合数据类型

  • 数组(array
    • 具有固定长度且元素类型相同的数据结构。数组长度在声明时就确定,不能动态改变。
    • 示例:
    var arr [5]int = [5]int{1, 2, 3, 4, 5}
    // 或简写为
    arr2 := [3]string{"a", "b", "c"}
    
  • 切片(slice
    • 是对数组的一个连续片段的引用,长度可以动态变化。切片是 Go 语言中常用的数据结构,相比数组更灵活。
    • 示例:
    s := []int{1, 2, 3}
    // 通过make函数创建切片
    s2 := make([]string, 0, 5)
    
  • 映射(map
    • 一种无序的键值对集合,类似于其他语言中的字典或哈希表。键必须是可比较的类型(如基本类型、指针、接口等),值可以是任意类型。
    • 示例:
    m := map[string]int{"one": 1, "two": 2}
    // 通过make函数创建map
    m2 := make(map[string]bool)
    
  • 结构体(struct
    • 一种用户自定义的数据类型,用于将不同类型的数据组合在一起。结构体可以包含多个字段,每个字段有自己的名称和类型。
    • 示例:
    type Person struct {
        Name string
        Age  int
    }
    p := Person{"John", 30}
    

3. 引用类型

  • 指针(pointer
    • 指针类型的值是一个变量的内存地址。通过指针,程序可以直接访问和修改变量在内存中的值。
    • 示例:
    var num int = 10
    var ptr *int = &num
    
  • 接口(interface
    • 定义了一组方法签名,但不包含方法的实现。接口类型的变量可以存储任何实现了这些方法的类型的值,实现了多态性。
    • 空接口的使用(非常重要):
      • 作为入参可以作为占位符,替代任意一种数据类型
      • 作为变参使用的时候,也是如此,可以看看 fmt.Printf族函数,应该有类似的使用
    • 示例:
    type Animal interface {
        Speak() string
    }
    type Dog struct{}
    func (d Dog) Speak() string {
        return "Woof"
    }
    var a Animal = Dog{}
    

4. 其他类型

  • 常量(constant
    • 约定常量的名字使用全大写
    • 常量的值不可以被修改
// 1. 显示定义
const PIE float64 = 3.14

// 2. 类型推断
const (
	Monday    = 1
	Tuesday   = 2
	Wednesday = 3
	Thursday  = 4
	Friday    = 5
	Saturday  = 6
	Sunday    = 7
)

// 3. 相邻行如果未赋值,则与上一行的值一样
const (
    a = 100
    b
    c = "hehe"
    d
)
  • 枚举(enum)
    • 就是一种特殊的常量类型
    • 补充一个iota的用法:从iota出现的位置自增长,默认从0开始
const (
	e = iota
	f
	g
	h
	i = "hhhh"
	j
	k = iota
	l
)

func main() {
	fmt.Println(e, f, g, h)
	fmt.Println(i, j, k, l)
}


// 输出结果:
// 0 1 2 3 
// hhhh hhhh 6 7
  • 通道(channel
    • 用于在不同的 Go 协程(goroutine)之间进行通信和同步。通道可以传递数据,并且可以是带缓冲的或无缓冲的。
    • 通道的类型可以有三种:读写,只读,只写。
    • 只读和只写类型仅仅应用于入参,创建一个只读,只写,没有实际意义。
	c1 := make(chan int)      // 读写通道
	c2 := make(<- chan int)   // 只写通道 示例,不要这么用
	c3 := make(chan <- int)   // 制度通道 示例,不要这么用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

唯独不开心

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值