func main() { var name string = "抢手" nameType := reflect.TypeOf(name) nameValue := reflect.ValueOf(name) fmt.Println("name type:", nameType) fmt.Println ......
521
0
0
2022-11-08
本篇文章,我们着重介绍Go编程中的Pipeline模式。对于Pipeline用过Unix/Linux命令行的人都不会陌生,他是一种把各种命令拼接起来完成一个更强功能的技术方法。在今天,流式处理,函数式编程,以及应用网关对微服务进行简单的API编排,其实都是受pipeline这种技术方式的影响,Pipeline这种技术在可以很容易的把代码按单一职责的原则拆分成 ......
395
0
0
2022-08-25
前言我们经常会谈到并发和并行这两个词,对于操作系统而言,并发是指一个处理器同时处理多个任务。并行是指多个处理器或者是多核的处理器同时处理多个不同的任务。以下这张图可以比较形象的讲解并发和并行,并发是两个队列交替使用一台咖啡机,并行是两个队列同时使用两台咖啡机,这里的队列可以代表执行的程序。正文这里聚焦在并发处理上,对于不同的程序,我们知道是在处理器上交替执行 ......
507
0
0
2022-08-02
收录于 《Go 基础系列》,作者:潇洒哥老苗。学到什么并发与并行的区别?什么是 Goroutine?什么是通道?Goroutine 如何通信?相关函数的使用?select 语句如何使用?并发与并行为了更有意思的解释这个概念,我借用知乎上的一个回答:你吃饭吃到一半,电话来了,你一直到吃完了以后才去接,这就说明你不支持并发也不支持并行。你吃饭吃到一半,电话来了, ......
392
0
0
2022-07-18
package main import ( "fmt" "sync" "time" ) //模拟一个耗时的任务 func job(worker int)int{ time.Sleep(time.Millisecond*500) return worker } func main(){ ......
375
0
0
2022-06-14
前言简化并发开发以下代码内容均来自大彬大佬1.简单例子将数组内的数据转变为他们的平方分解以上过程为三个步骤生产信息 producer(),遍历切片处理信息 square(),计算平方消费信息 main(),消费1.生产信息func producer(nums ...int) <-chan int { // 创建带缓冲通道 out : ......
585
0
0
2022-05-30
反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。代理代码package main import ("fmt""net/http" "net/http/httpu ......
334
0
0
2022-04-27
[TOC]GO通道和 sync 包的分享我们一起回顾一下上次分享的内容:GO协程同步若不做限制的话,会产生数据竞态的问题我们用锁的方式来解决如上问题,根据使用场景选择使用互斥锁 和 读写锁比使用锁更好的方式是原子操作,但是使用go的 sync/atomic需要小心使用,因为涉及内存要是对GO的锁和原子操作还感兴趣的话,欢迎查看文章GO的锁和原子操作分享上次我 ......
394
0
0
2022-04-22
[TOC]GO的锁和原子操作分享上次我们说到协程,我们再来回顾一下:协程类似线程,是一种更为轻量级的调度单位线程是系统级实现的,常见的调度方法是时间片轮转法协程是应用软件级实现,原理与线程类似协程的调度基于 GPM 模型实现要是对协程的使用感兴趣的话,可以看看这篇文章简单了解一下瞅一眼就会使用GO的并发编程分享今天我们来聊聊GO里面的锁锁是什么?锁 是用于解 ......
423
0
0
2022-04-21
一、数组(Array)数组:数组是指有序的元素序列。如果将有限个类型相同的变量的集合命名,那么这个名称就是数组名,而组成数组的各个变量称为数组的分量,也称为数组的元素,有时也称为下标变量,而数组中的数据可以使用下标(索引)来查找到。其实在编程语言中数组的概念是一样的,下面具体来看看golang中数组是如何定义和使用的:1.数组的定义方法一:var arr1 ......
314
0
0
2022-04-19
直接上codepackage main import ("fmt""sync" ) func func3(wg *sync.WaitGroup, ch chan string) { ch <- "func1 ok" wg.Done() } func func4(wg *sync.WaitGroup, ch ch ......
368
0
0
2022-04-11
人是一种高并发的物种,细品。初识对 Go 语言的第一印象就是其原生地支持并发编程,而且使用的是协程,比线程更加轻量。关于进程、线程和协程的区别进程是“程序执行的一个实例” ,担当分配系统资源的实体。进程创建必须分配一个完整的独立地址空间。进程切换只发生在内核态。线程:线程是进程的一个执行流,独立执行它自己的程序代码,是程序执行流的最小单元,是处理器调度和分派 ......
399
0
0
2022-04-10