MST

星途 面试题库

面试题:Go中chan如何保障简单数据类型的一致性

在Go语言中,使用chan传递简单数据类型(如int、string)时,简述chan是如何保障数据一致性的,举例说明在多协程环境下chan对简单数据传递的一致性表现。
23.6万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试
  1. chan保障数据一致性的原理
    • 在Go语言中,chan(通道)是一种类型安全的通信机制。当使用chan传递数据时,它通过同步机制来保障数据一致性。发送操作(ch <- value)和接收操作(value := <-ch)都是阻塞的。这意味着当一个协程向通道发送数据时,它会阻塞直到另一个协程从通道接收数据;反之,当一个协程从通道接收数据时,它会阻塞直到有数据被发送到通道。这种阻塞特性确保了数据的有序传递,避免了竞态条件,从而保障了数据一致性。
  2. 多协程环境下chan对简单数据传递的一致性表现示例
package main

import (
    "fmt"
)

func main() {
    ch := make(chan int)

    go func() {
        num := 42
        ch <- num
    }()

    result := <-ch
    fmt.Println("Received:", result)
}

在这个例子中,有一个匿名协程向通道ch发送一个整数42。主协程从通道ch接收数据。由于通道的阻塞特性,主协程会等待直到匿名协程发送数据,然后才继续执行并打印接收到的数据。这样就确保了数据从发送协程到接收协程的一致传递,不会出现数据竞争或不一致的情况。