首页 话题 小组 问答 好文 用户 我的社区 域名交易 唠叨
Go 编程语言

Go 编程语言

288 帖子 8 成员
创建于 2025-03-22 组长:凯特网
Go 是一个开源的编程语言,它能让构造简单、可靠且高效的软件变得容易。

  • 本节将带领大家结合咱们前面所学的知识开发一个聊天的小程序,它可以在几个用户之间相互广播文本消息。这个程序里包含 4 个 goroutine。主 goroutine 和广播(broadcaster)go...
    宁儿 发表于 186 天前
    0
    42
  • 当进行和 Go语言有关讨论的时候,经常听到人们抛出 CSP 这个缩写。在某些环境下 CSP 经常被赞美成 Go语言成功的原因以及并发编程的“万能钥匙”。它让不知道 CSP 的人开始认为计算机科学已经发...
    宁儿 发表于 186 天前
    0
    46
  • qsort 快速排序函数是 C语言的高阶函数,支持用于自定义排序比较函数,可以对任意类型的数组进行排序。本节我们尝试基于 C语言的 qsort 函数封装一个 Go语言版本的 qsort 函数。认识 q...
    宁儿 发表于 186 天前
    0
    43
  • 前面的部分都是关于程序正确性的讨论,如果这些问题得到正确的处理,那我们的程序将永远不会给出错误的答案。不幸的是,即使成功处理了这些问题,还有另一类问题需要解决:死锁、活锁和饥饿。所有这些问题都与你的程...
    宁儿 发表于 186 天前
    0
    45
  • Go语言中除了可以使用通道(channel)和互斥锁进行两个并发程序间的同步外,还可以使用等待组进行多个任务的同步,等待组可以保证在并发环境中完成指定数量的任务在 sync.WaitGroup(等待组...
    宁儿 发表于 186 天前
    0
    53
  • Go语言包中的 sync 包提供了两种锁类型:sync.Mutex 和 sync.RWMutex。Mutex 是最简单的一种锁类型,同时也比较暴力,当一个 goroutine 获得了 Mutex 后,...
    宁儿 发表于 186 天前
    0
    57
  • Go语言程序可以使用通道进行多个 goroutine 间的数据交换,但这仅仅是数据同步中的一种方法。通道内部的实现依然使用了各种锁,因此优雅代码的代价是性能。在某些轻量级的场合,原子访问(atomic...
    宁儿 发表于 186 天前
    0
    43
  • Telnet 协议是 TCP/IP 协议族中的一种。它允许用户(Telnet 客户端)通过一个协商过程与一个远程设备进行通信。本例将使用一部分 Telnet 协议与服务器进行通信。服务器的网络库为了完...
    宁儿 发表于 186 天前
    0
    47
  • 在执行一些昂贵的计算任务时,我们希望能够尽量利用现代服务器普遍具备的多核特性来尽量将任务并行化,从而达到降低总计算时间的目的。此时我们需要了解 CPU 核心的数量,并针对性地分解计算任务到多个 gor...
    宁儿 发表于 186 天前
    0
    51
  • 通道是一个引用对象,和 map 类似。map 在没有任何外部引用时,Go语言程序在运行时(runtime)会自动对内存进行垃圾回收(Garbage Collection, GC)。类似的,通道也可以被...
    宁儿 发表于 186 天前
    0
    41
  • Go语言中的 time 包提供了计时器的封装。由于 Go语言中的通道和 goroutine 的设计,定时任务可以在 goroutine 中通过同步的方式完成,也可以通过在 goroutine 中异步回...
    宁儿 发表于 186 天前
    0
    55
  • 服务器开发中会使用RPC(Remote Procedure Call,远程过程调用)简化进程间通信的过程。RPC 能有效地封装通信过程,让远程的数据收发通信过程看起来就像本地的函数调用一样。本例中,使...
    宁儿 发表于 186 天前
    0
    46
  • 多路复用是通信和网络中的一个专业术语。多路复用通常表示在一个信道上传输多路信号或数据流的过程和技术。提示报话机同一时刻只能有一边进行收或者发的单边通信,报话机需要遵守的通信流程如下:说话方在完成时需要...
    宁儿 发表于 187 天前
    0
    85
  • 在前面对 channel 的介绍中,我们完全没有提到错误处理的问题,而这个问题显然是不能被忽略的。在并发编程的通信过程中,最需要处理的就是超时问题,即向 channel 写数据时发现 channel ...
    宁儿 发表于 187 天前
    0
    65
  • Go语言中有缓冲的通道(buffered channel)是一种在被接收前能存储一个或者多个值的通道。这种类型的通道并不强制要求 goroutine 之间必须同时完成发送和接收。通道会阻塞发送和接收动...
    宁儿 发表于 187 天前
    0
    75
  • Go语言中无缓冲的通道(unbuffered channel)是指在接收前没有能力保存任何值的通道。这种类型的通道要求发送 goroutine 和接收 goroutine 同时准备好,才能完成发送和接...
    宁儿 发表于 187 天前
    0
    94
  • Go语言的类型系统提供了单方向的 channel 类型,顾名思义,单向 channel 只能用于发送或者接收数据。channel 本身必然是同时支持读写的,否则根本没法用。假如一个 channel 真...
    宁儿 发表于 187 天前
    0
    74
  • 前面的例子创建的都是无缓冲通道。使用无缓冲通道往里面装入数据时,装入方将被阻塞,直到另外通道在另外一个 goroutine 中被取出。同样,如果通道中没有放入任何数据,接收方试图从通道中获取数据时,同...
    宁儿 发表于 187 天前
    0
    62
  • 如果说 goroutine 是 Go语言程序的并发体的话,那么 channels 就是它们之间的通信机制。一个 channels 是一个通信机制,它可以让一个 goroutine 通过它给另一个 go...
    宁儿 发表于 187 天前
    0
    62
  • C、Lua、Python 语言都支持 coroutine 特性。coroutine 与 goroutine 在名字上类似,都可以将函数或者语句在独立的环境中运行,但是它们之间有两点不同:gorouti...
    宁儿 发表于 187 天前
    0
    58
  • 在讲解并发概念时,总会涉及另外一个概念并行。下面让我们来了解并发和并行之间的区别。并发(concurrency):把任务在不同的时间点交给处理器进行处理。在同一时间点,任务并不会同时运行。并行(par...
    宁儿 发表于 187 天前
    0
    59
  • 在 Go语言程序运行时(runtime)实现了一个小型的任务调度器。这套调度器的工作原理类似于操作系统调度线程,Go 程序调度器可以高效地将 CPU 资源分配给每一个任务。传统逻辑中,开发者需要维护线...
    宁儿 发表于 187 天前
    0
    55
  • Go语言中如果两个或者多个 goroutine 在没有互相同步的情况下,访问某个共享的资源,并试图同时读和写这个资源,就处于相互竞争的状态,这种情况被称作竞争状态(race candition)。竞争...
    宁儿 发表于 187 天前
    0
    53
  • 通过上一节《Go语言goroutine》的学习,关键字 go 的引入使得在 Go语言中并发编程变得简单而优雅,但我们同时也应该意识到并发编程的原生复杂性,并时刻对并发中容易出现的问题保持警惕。事实上,...
    宁儿 发表于 187 天前
    0
    52
  • 在编写 Socket 网络程序时,需要提前准备一个线程池为每一个 Socket 的收发包分配一个线程。开发人员需要在线程数量和 CPU 数量间建立一个对应关系,以保证每个任务能及时地被分配到 CPU ...
    宁儿 发表于 187 天前
    0
    59
  • 优雅的并发编程范式,完善的并发支持,出色的并发性能是 Go语言区别于其他语言的一大特色。使用 Go语言开发服务器程序时,就需要对它的并发机制有深入的了解。并发基础回到在 Windows 和 Linux...
    宁儿 发表于 187 天前
    0
    60
  • 对于任何一个正在运行的应用,如何获取准确的绝对时间都非常重要,但是在一个分布式系统中我们很难保证各个节点上绝对时间的一致性,哪怕通过 NTP 这种标准的对时协议也只能把时间的误差控制在毫秒级,所以相对...
    宁儿 发表于 187 天前
    0
    48
  • Pingo 是一个用来为Go语言程序编写插件的简单独立库,因为 Go 本身是静态链接的,因此所有插件都以外部进程方式存在。Pingo 旨在简化标准 RPC 包,支持 TCP 和 Unix 套接字作为通...
    宁儿 发表于 187 天前
    0
    50
  • 电子邮件在日常工作中有很大用途,凡项目或任务,有邮件来往可避免扯皮背锅。而在一些自动化的应用场合,也使用得广泛,特别是系统监控方面,如果在资源使用达到警戒线之前自动发邮件通知运维人员,能消除隐患于前期...
    宁儿 发表于 187 天前
    0
    52
  • Context 是Go语言中非常有趣的设计,它与Go语言中的并发编程有着比较密切的关系,在其他语言中我们很难见到类似 Context 的东西,它不仅能够用来设置截止日期、同步信号还能用来传递请求相关的...
    宁儿 发表于 187 天前
    0
    52
站长交流