首页 > 其他分享 >golang为什么chan大部分是发送结构体,而不是其它比如string

golang为什么chan大部分是发送结构体,而不是其它比如string

时间:2024-05-27 23:15:44浏览次数:17  
标签:发送 string chan golang token 类型 结构

 

type token struct{}

type Group struct {
    cancel func(error)

    wg sync.WaitGroup

    sem chan token

    errOnce sync.Once
    err     error
}

func (g *Group) done() {
    if g.sem != nil {
        <-g.sem
    }
    g.wg.Done()
}

在Go语言中,通道(channel)可以发送任何类型的数据,包括基本类型(如int、string)和复合类型(如结构体、数组、切片等)。

选择发送特定类型的数据完全取决于程序设计的需求和上下文。

 

发送一个结构体(如token{})作为信号或同步机制可能是出于以下几点考虑:

  封装信息:结构体允许你封装多个数据项到一个单一的类型中。即使当前只需要一个空信号,未来可能需要扩展携带更多信息,结构体提供了这种灵活性。

  类型安全:定义一个专门的结构体类型(如token),可以作为一种类型的标记,增加代码的可读性和类型安全性。当看到通过通道发送或接收这种类型时,立即能明白其用途,减少了误用的可能。

  清晰的语义:在并发编程中,使用特定的结构体作为信号可以明确表示某种特定的事件或状态变化,这对于阅读和维护代码的人来说是非常直观的。

  避免滥用字符串或其他类型:在某些情况下,直接使用字符串或基本类型作为信号可能不够精确,可能导致混淆,特别是当这些类型在程序中有其他用途时。

 

因此,尽管可以设计为发送字符串或其他类型,但选择发送一个结构体往往是出于对清晰性、类型安全和未来扩展性的考虑。

 

Link:https://www.cnblogs.com/farwish/p/18216784

标签:发送,string,chan,golang,token,类型,结构
From: https://www.cnblogs.com/farwish/p/18216784

相关文章

  • golang的交叉编译是什么
     Go(Golang)的交叉编译是指在一种硬件架构或操作系统环境下,使用Go编译器生成适用于另一种架构或操作系统的可执行程序。Go语言的设计使得交叉编译变得非常简单和高效,它允许开发者在开发环境中构建目标平台上的代码,而无需在目标平台上实际运行编译过程。 在Go中,交叉编译主要涉......
  • golang的 CGO 是什么
     CGO是Go(Golang)语言中的一个工具,全称为"C-Go"或者"CforGo"。它是Go标准库的一部分,允许Go代码与C语言代码进行交互。CGO提供了在Go程序中使用C语言库的能力,同时也允许C代码调用Go的函数。通过CGO,开发者可以利用Go语言的强类型和垃圾回收等特性,同时利用C语言的高性能和广......
  • C++ ─── string的模拟实现
            本博客将简单实现来模拟实现string类,最主要是实现string类的构造、拷贝构造、赋值运算符重载以及析构函数。    下期我们继续讲解完整版string的模拟实现(将不再会是浅拷贝了)        说明:下述string类没有显式定义其拷贝构造函数与赋值运......
  • Object 和 String
    APIAPI--ApplicationProgrammingInterface应用程序接口1Object常用方法publicstaticvoidmain(String[]args)throwsCloneNotSupportedException{//Object是java中所有类的顶级父类TestDemotestDemo=newTestDemo();//println中......
  • StringBuffer和StringBuilder方法
    StringBuffer:可变长字符串,jdk1.0提供,运行效率满、线程安全。StringBuilder:可变长字符串,jdk5.0提供,运行效率快、线程不安全。(单线程推荐使用)效率:StringBuilder>StringBuffer>String//验证StringBuilder效率高于StringpublicclassString{publicstaticvoidmain(java.lang.......
  • String案例
    substring方法:截取指定位置的字符串publicclassDemo06{publicstaticvoidmain(String[]args){Stringstr="thisisatext";//1.将str中的单词单独提取出来String[]arr=str.split("");for(Strings:arr){System.out.println(s);}//2.将str中的text替......
  • github 解决推拉代码提示 REMOTE HOST IDENTIFICATION HAS CHANGED 失败
    1.背景在拉取github上一个新项目的时候爆出WARNING:REMOTEHOSTIDENTIFICATIONHASCHANGED!第一反应是电脑被黑了,传说中的中间人攻击(题外话一下,其实所有的代理软件都算是中间人哦~),稍微检查了一下,应该不是。仔细看内容,有点意思。@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@......
  • C++字符串string
    包含头文件:#include<string>C++string与C语言char*之间的相互转换str.c_str()std::string()字符串与float/int之间的相互转换字符串转int/float利用std::stoi将字符串转为整型/转为float型:std::stof,即string-to-floatint/float转字符串std::to_string()......
  • JavaScript 中 toString 的奇妙使用
    JavaScript中的toString()方法,我们通常会一些其他类型的变量,转为字符串类型。但这里还有一些其他奇妙的用法。不同的类型调用toString()会得到不同的结果。我们来一一分析下。1.函数类型我们开发者自定义的函数,和JavaScript官方内置的函数,在调用toString时,输出是不一样......
  • 关于全局变量的坑, golang熟手们经常遇到
    关于全局变量的坑,golang熟手们经常遇到原创 fengzi Go语言圈 2024-05-2708:30 广东 听全文Go语言圈Go语言开发者的学习好助手,分享Go语言知识,技术技巧,学习与交流Go语言开发经验,互动才有助于技术的提升,每天5分钟,助你GO语言技术快乐成长160篇原创内容公......