Maison  >  Article  >  développement back-end  >  Golang Chan en lecture seule

Golang Chan en lecture seule

WBOY
WBOYoriginal
2023-05-06 09:25:07874parcourir

En langage Go, chan est un concept très important, et le type chan est utilisé pour la communication entre goroutines. Il s'agit d'un mécanisme de communication thread-safe qui peut réaliser le transfert de données et la synchronisation entre plusieurs goroutines. Lors de l'utilisation de chan, nous utilisons généralement l'opérateur "<-" pour les opérations de lecture et d'écriture, mais dans certains cas, nous n'avons besoin que de lire les données de chan sans écrire de données sur chan. Dans ce cas, nous devons utiliser le canal en lecture seule de chan. .

En langage Go, le type chan a deux formes : unidirectionnel et bidirectionnel. Le canal bidirectionnel peut effectuer des opérations de lecture et d'écriture, tandis que le canal unidirectionnel ne peut effectuer que des opérations de lecture ou d'écriture. Les types de canaux unidirectionnels sont divisés en canaux en lecture seule et en écriture seule. Les canaux en lecture seule sont utilisés pour recevoir des données, et les canaux en écriture seule sont utilisés pour envoyer des données. Ce qui suit se concentre sur l'utilisation de chan en lecture seule.

Lors de la définition d'une variable de type chan, vous pouvez utiliser l'opérateur "<-" pour spécifier la direction du chan unidirectionnel, comme indiqué ci-dessous :

// 定义双向chan
c1 := make(chan int)

// 定义只读chan
var c2 <- chan int = c1

// 定义只写chan
var c3 chan <- int = c1

Dans le code ci-dessus, une variable de type chan bidirectionnel c1 est d'abord définie , puis c1 est affecté à une variable de type chan en lecture seule c2, de sorte que c2 ne peut effectuer que des opérations de lecture. De la même manière, attribuez c1 à la variable chan en écriture seule c3, et c3 ne peut effectuer que des opérations d'écriture. Vous pouvez utiliser chan pour passer à une fonction, ce qui vous permet de contrôler quelles opérations peuvent être effectuées dans cette fonction.

Voici un exemple qui montre comment utiliser chan en lecture seule :

package main

import (
    "fmt"
)

// 使用只读chan读取随机数
func readRandom(randCh <-chan int) {
    for randNum := range randCh {
        fmt.Printf("读取的随机数为:%d\n", randNum)
    }
}

func main() {
    // 创建一个带缓冲区的只读chan
    randCh := make(chan int, 10)

    // 在一个goroutine中,往chan发送数据
    go func() {
        for i := 0; i < 10; i++ {
            randCh <- i
        }
        close(randCh)
    }()

    // 在另外一个goroutine中,读取数据
    go readRandom(randCh)

    // 等待goroutine执行结束
    fmt.Scanln()
}

Dans le code ci-dessus, créez d'abord une variable de type chan en lecture seule randCh avec un tampon. Utilisez une goroutine pour écrire des données dans randCh, puis lisez les données dans une autre goroutine en appelant la fonction readRandom. Utilisez le mot-clé "range" pour parcourir en continu les données du canal. Lorsque le canal est fermé, le canal de lecture goroutine se ferme.

Il convient de noter que l'opérateur "<-" ne peut pas être utilisé pour les opérations d'écriture dans un canal en lecture seule. Si vous essayez d'écrire, vous obtiendrez une erreur au moment de la compilation. Par conséquent, un canal en lecture seule peut garantir que les données sont uniquement lues et non modifiées.

En bref, dans le langage Go, le type chan est un mécanisme de communication très utile. Différents besoins de communication peuvent être satisfaits en définissant différents types de canaux. Lorsque vous devez utiliser un canal en lecture seule dans vos besoins, vous pouvez spécifier la direction du canal en lecture seule. Le canal en lecture seule ne peut être utilisé que pour lire des données, ce qui évite la possibilité de modification des données, les rendant plus sûres et plus fiables.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Article précédent:transfert d'interface golangArticle suivant:transfert d'interface golang