package mainimport ( "fmt" "time")func main() { // 定义一个channel c := make(chan int, 3) fmt.Println("len(c) = ", len(c), ", cap(c) = ", cap(c)) go func() { defer fmt.Println("子go程结束") for i := 1; i < 4; i++ { c <- i fmt.Println("子.
原创
2021-03-27 21:26:56
72阅读
文章目录1. 前言:2. go的下载与配置3. Golang 目录结构4. Golang 的基础语法4.1. 变量声明4.2. 输入输出4.3. 条件控制4.4. 数组和切片4.5. 映射表 1. 前言:根据鼠鼠的实习投递经历,由于越来越多中大型公司都使用 Golang,在现在这个越来越内卷的后端就业环境下,学习一下 Golang 拓宽技术栈面是必须的,下面就跟着鼠鼠进行一些基础知识点的比较和学
转载
2024-09-28 19:31:21
44阅读
package mainimport ( "fmt")func main() { c := make(chan int) go func() { for i := 0; i < 5; i++ { c <- i } // 关闭channel close(c) }() for { if data, ok := <-c; ok { fmt.Println(data) } else { break } } fmt.Print.
原创
2021-03-27 21:40:14
201阅读
Golang阻塞的管道 疑惑: 对于处理不完任务的管道,剩下的任务是不是按照顺序处理的? 测试思路 生产者每 3 毫秒生产一条 消费者每秒消费一条 观察数据打印 如果数据是递增的,就是队列 不是递增的,那就是内部实现的是锁的竞争 代码 package main import ( "log" "tim ...
转载
2021-07-19 22:47:00
215阅读
2评论
package mainimport ( "fmt")func main() { c := make(chan int) go func() { for i := 0; i < 5; i++ { c <- i } // 关闭channel close(c) }() for { if data, ok := <-c; ok { fmt.Println(data) } else { break } } fmt.Print.
原创
2021-03-27 21:40:14
65阅读
package mainimport ( "fmt" "time")func main() { // 定义一个channel c := make(chan int, 3) fmt.Println("len(c) = ", len(c), ", cap(c) = ", cap(c)) go func() { defer fmt.Println("子go程结束") for i := 1; i < 4; i++ { c <- i fmt.Println("子.
原创
2021-03-27 21:26:56
152阅读
包、变量和函数一、举个例子现在我们来建立一个完整的程序 main.go: // Golang程序入口的包名必须为 main
package main // import "golang"
// 导入其他地方的包,包通过 go mod 机制寻找
import (
"fmt"
"golang/diy"
)
// init函数在main函数之前执行
func init() {
转载
2024-05-30 14:12:24
48阅读
为什么需要channelchannel的介绍管道的本质是队列 FIFO 先进先出定义/声明管道channel的初始化和写数据 管道的本质 向管道写入数据及查看管道的长度和容量 往管道加数据,不能超过它的容量,否则报错从管道中读取数据 管道为空的情况下继续取数据会报错...
原创
2021-07-06 09:45:46
931阅读
为什么需要channelchannel的介绍管道的本质是队列 FIFO 先进先出定义/声明管
原创
2022-01-19 14:27:23
335阅读
死锁编译器底层会分析,如果发现一个地方在不停的写,但是没有任何一个协程去读取这样就直接死锁,如果有一个协程在慢慢
原创
2024-01-02 12:21:01
115阅读
package mainimport "fmt"func main() { // 定义一个channel c := make(chan int) go func() { defer fmt.Println("goroutine结束") fmt.Println("goroutine正在运行") c <- 666 // 从channel中发送数据 }() num := <-c // 从 channel中读数据 fmt.Println("num = ", num) .
原创
2021-03-27 21:06:00
260阅读
package mainimport "fmt"func main() { // 定义一个channel c := make(chan int) go func() { defer fmt.Println("goroutine结束") fmt.Println("goroutine正在运行") c <- 666 // 从channel中发送数据 }() num := <-c // 从 channel中读数据 fmt.Println("num = ", num) .
原创
2021-03-27 21:06:00
120阅读
Go by Example for循环
原创
2022-11-12 00:45:49
327阅读
基础 并发:电脑同时听歌,看小说,打游戏。cpu根据时间片进行划分,交替执行这三个程序。我们可以感觉是同时产生的。 并行:多个cpu(多核)上述动作同时执行 C语言:,实现并发过程使用的是多线程(C++的最小资源单元) Golang:Golang中不是线程,而是Go程(goroutine),Go程是 ...
转载
2021-09-29 21:34:00
514阅读
点赞
2评论
package mainimport ( "fmt")func main() { c := make(chan int) go func() { for i := 0; i < 5; i++ { c <- i } close(c) }() for data := range c { fmt.Println(data) } fmt.Println("main finished")}
原创
2021-03-27 21:51:03
253阅读
package mainimport ( "fmt")func main() { c := make(chan int) go func() { for i := 0; i < 5; i++ { c <- i } close(c) }() for data := range c { fmt.Println(data) } fmt.Println("main finished")}
原创
2021-03-27 21:51:03
425阅读
最近在开发过程中遇到问题,追踪了很久后发现是golang的经典问题,在for循环中使用了goroutine,在goroutine中使用了for循环的参数。问题现象:在使用rabbitmq进行数据传递时,发送端在一次循环中发送了8000条id不同的数据到rabbitmq的队列中,接收端监听该队列并从rabbitmq中取数据。接收到的数据在程序中处理后写入数据库,结果发现数据中并没有写入8000条数据
转载
2024-08-08 09:41:47
34阅读
# Java 重构管道循环教学指南
在软件开发中,重构是一个重要的过程。它帮助我们提高代码的可读性、可维护性和可扩展性。本篇文章将指导一位刚入行的小白,如何在Java中实现“重构管道循环”。我们将分步骤说明整个过程,并提供必要的代码示例。
## 流程概述
首先,我们需要清晰地了解重构的流程。下面是一个简单的表格,描述了我们将要遵循的步骤:
| 步骤 | 描述
原创
2024-10-19 05:08:53
6阅读
假设我们现在有这么一个需求: 计算1-200之间各个数的阶乘,并将每个结果保存在map中,最终显示出来,要求使用goroutine。 分析: (1)使用goroutine完成,效率高,但是会出现并发/并行安全问题; (2)不同协程之间如何通信; 对于(1):不同协程之间可能同时对一块内存进行操作,导
转载
2019-11-28 20:38:00
98阅读
2评论
是一个只能接收(receive)整数值的通道(channel)。这种类型的变量只能从通道读取数据,不能向通道写入数据。函数接收一
原创
2024-03-20 15:51:13
98阅读