context 主要用来在 goroutine 之间传递上下文信息,包括:取消信号、超时时间、截止时间、元数据传递等。 本文通过对Context源码阅读,对其有更深的理解,以便在工作中正确使用。
Go语言凭借其简洁、高效、并发支持等特性逐渐崭露头角。作为一门开源的静态编程语言,Go语言自带了丰富的标准库,为开发者提供了强大的工具和功能。本文将深入介绍Go语言几种标准库,帮助读者更好地了解和利用这些库,提高编程效率。
Go虽然是自动GC类型的语言,但在编码过程中如果不注意,很容易造成内存泄漏的问题。比较常见的是发生在 slice、time.Ticker、goroutine 等的使用过程中,这里结合我们日常中经常遇到的,以及网上搜集到一些Case进行系统性的总结一下,希望对你的日常工作有所帮助。例如:由于数组是Golang的基本数据类型,每个数组占用不同的内存空间,生命周期互不干扰,很难出现内存泄漏的情况,但是数组作为形参传输时,遵循的是值拷贝,如果函数被多个goroutine调用且数组过大时,则会导致内存使用激增。
本文主要介绍Go内存泄漏的常见问题,解决方法,以及如何使用工具对内存泄漏进行分析。
大家好,我是大熊,今天给大家带来一期关于Go中`slice`(切片) 的使用方法。 `Slice` 在编程中经常作为动态数组使用,提供了丰富API的同时,也给开发者带来一定风险。 如果不了解内部的实现机制,有可能会遇到莫名其妙的现象,本文从浅入深来把这个类型说清楚。
大家好,今天给大家分享的知识点是 Go 中的`nil`用法详解,在实际工作中,看到很多同学使用`nil`的时候还是不太理解,导致了很多奇怪的问题发生(尤其是和`nil` 做比较经常出现走入到奇怪的分支)。如果觉得一个技术点奇怪,不是我们所期望的效果,原因是我们对其原理不够了解,不够熟悉。 那今天就一起探索下这块的知识。
Go 存在 4 种类型转换分别为:断言、强制、显式、隐式。在日常开发中常说的类型转换是指断言,显示是基本的类型转换、隐式使用到但是不会注意到。断言、强制、显式三类在 Go 语法描述中均有说明,隐式是在日常使用过程中总结出来。Go语言程序中对指针获取反射对象时,可以通过 reflect.Elem() 方法获取这个指针指向的元素类型。这个获取过程被称为取元素,等效于对指针类型变量做了一个(*)操作。
通道(channel)介绍:Go语言设计团队的首任负责人Rob Pike对并发编程的一个建议 是不要让计算通过共享内存来通讯,而应该让它们通过通讯来共享内存。 通道机制就是这种哲学的一个设计结果。我们只应该让一个通道唯一的发送者关闭此通道。 称此原则为通道关闭原则。通过共享内存来通讯 和 通过通讯来共享内存 是并发编程中的两种编程风格。 当通过共享内存来通讯的时候,需要一些传统的并发同步技术(比如互斥锁)来避免数据竞争。
前面章节,已经看到了 Go 语言设计简单(尤其是其中),接着就是了解一下 Go 的并行程序设计,Go 从语言层面就支持了并行。本文将会带你了解其中巧妙的设计。前面章节,已经看到了 Go 语言设计简单(尤其是其中),接着就是了解一下 Go 的并行程序设计,Go 从语言层面就支持了并行。 不过设计上我们要遵循:不要通过共享内存来通信,而要通过通信来共享。
上个章节我们学到了GO中Method的巧妙设计,本章节,我们再来深入学习interface 的详解。Go 语言里面设计最精妙的应该算 interface,它让面向对象,内容组织实现非常的方便,当你看完这一章,你就会被 interface 的巧妙设计所折服。既然是复用,那就要从使用者的角度去想,我认为是什么样子它就是什么样子。【面向接口】。 我只关心这段代码结构能做哪些事情,我复用它,我才不管它符不符合常识。【并不关心内部实现方法】。