Go基础知识巩固二

简介: Go基础知识巩固二
  1. make和new的区别:都是用来初始化的
    new多用来为基本数据类型初始化内存,返回的是指针
    make用来初始化slince,map,channel,返回的是对应的类型
  2. 无缓冲通道和有缓冲通道区别:无缓冲通道传值得时候必须要有接收方来接收通道,否则报错;有缓冲通道可以直接传值
  3. 退出并发的三种方式
    利用全局变量来退出:定义exit来退出
var wg sync.WaitGroup
var exit bool
func worker() {
  for {
    fmt.Println("worker")
    time.Sleep(time.Second)
    if exit {
      break
    }
  }
  wg.Done()
}


利用通道channel+标签来退出 一般用结构体来定义通道,内存占用小:

func worker(exitChan chan struct{}) {
LOOP:
  for {
    fmt.Println("worker")
    time.Sleep(time.Second)
    select {
    case <-exitChan: // 等待接收上级通知
      break LOOP
    default:
    }
  }
  wg.Done()
}


官方context解法 在底层和使用通道没什么区别

var wg sync.WaitGroup
func worker(ctx context.Context) {
  defer wg.Done()
hello:
  for {
    fmt.Println("wuhu")
    time.Sleep(time.Second)
    select {
    case <-ctx.Done():
      break hello
    default:
    }
  }
}
func main() {
  ctx, cancel := context.WithCancel(context.Background())
  wg.Add(1)
  go worker(ctx)
  time.Sleep(time.Second * 3)
  cancel()
  wg.Wait()
  fmt.Println("over")

不同于上面两种的是:context可以同时退出多个并发程序,退出一个进程中子子孙孙的进程。

相关文章
|
Go C语言
GO基础知识分享2
GO基础知识分享2
|
小程序 Java Go
100天精通Golang(基础入门篇)——第14天:深入解析Go语言函数->从概念到实践,助您精通基础知识!(基础)
100天精通Golang(基础入门篇)——第14天:深入解析Go语言函数->从概念到实践,助您精通基础知识!(基础)
73 0
|
存储 算法 Java
Go入门篇:(二)基础知识之结构,包,变量初探
Go入门篇:(二)基础知识之结构,包,变量初探
85 0
|
Go C语言 Cloud Native
GO基础知识分享2 | GO主题月
[TOC] 兵长:胖sir,咋还在看基础知识嘞?你以前可不是这样的哦 胖sir:切,我今天看的和之前的可不一样 兵长:有啥不一样的,你能给我说出花来嘛 胖sir:小样,你自己好好看看 兵长:看看就看看
114 0
|
安全 编译器 Serverless
GO基础知识分享 | GO主题月
兵长:哟,最近在干啥呢 胖sir:在看我之前的go基础学习资料呢,回顾一下 兵长:那给我分享一下呗,我也想回顾回顾 胖sir:用你的小手指点开你的手机,我来传给你 兵长:你信不信我的小手指可以带你飞整个峡谷 . . .
|
算法 Go 调度
Go 语言入门很简单 -- 15. Go 并发基础知识 #私藏项目实操分享#
Go 语言入门很简单 -- 15. Go 并发基础知识 #私藏项目实操分享#
116 0
Go 语言入门很简单 -- 15. Go 并发基础知识 #私藏项目实操分享#
|
Go
2.go基础知识
内置关键字(25个,均为小写) break default func interface select case defer go map struct chan else goto package switch const fall...
911 0
|
3天前
|
存储 监控 算法
员工上网行为监控中的Go语言算法:布隆过滤器的应用
在信息化高速发展的时代,企业上网行为监管至关重要。布隆过滤器作为一种高效、节省空间的概率性数据结构,适用于大规模URL查询与匹配,是实现精准上网行为管理的理想选择。本文探讨了布隆过滤器的原理及其优缺点,并展示了如何使用Go语言实现该算法,以提升企业网络管理效率和安全性。尽管存在误报等局限性,但合理配置下,布隆过滤器为企业提供了经济有效的解决方案。
31 8
员工上网行为监控中的Go语言算法:布隆过滤器的应用