Golang进阶
文章平均质量分 82
思维的深度
这个作者很懒,什么都没留下…
展开
-
常见的并发模型
常见的并发模型,基于线程与锁的内存共享模型、Actor模型和CSP模型原创 2023-02-17 09:36:10 · 1177 阅读 · 0 评论 -
以alpine作为基础镜像构建Golang可执行程序
Alpine介绍 Alpine操作系统是一个面向安全的轻型Linux发行版。它不同于通常Linux发行版,Alpine采用了musl libc和busybox以减小系统的体积和运行时资源消耗,但功能上比busybox又完善的多,因此得到开源社区越来越多的青睐。在保持瘦身的同时,Alpine还提供了自己的包管理工具apk,可以通过https://pkgs...原创 2020-01-20 10:24:37 · 4559 阅读 · 0 评论 -
Golang sync.Pool详解
Golang中sync.Pool用来提高对象复用几率,减少gc的压力,减少内存分配,它是线程安全的,常用来存储并复用临时对象。原理为了减小并发中锁的竞争,sync.pool为每个P(对象cpu线程)分配一个子池子poolLocal,每个poolLocal有private对象和shared共享列表对象,private对象只有对应的P可访问,无需加锁, shared共享列表对象可被其它P共享,...原创 2019-11-21 19:43:40 · 884 阅读 · 0 评论 -
go pprof详细理解及使用
一、概述 在Go语言中,我们可以通过标准库的代码包runtime和runtime/pprof中的程序来生成三种包含实时性数据的概要文件,分别是CPU概要文件、内存概要文件和程序阻塞概要文件。cpu概要文件在默认情况下,Go语言的运行时系统会以100 Hz的的频率对CPU使用情况进行取样。内存概要文件内存概要文件用于保存在用户程序执行期间的内存使用情况。这里所...原创 2019-10-25 18:52:16 · 21676 阅读 · 1 评论 -
Golang sync.Cond详细理解
sync.Cond用于goroutine之间的协作,用于协程的挂起和唤醒。结构体type Cond struct { noCopy noCopy // noCopy可以嵌入到结构中,在第一次使用后不可复制,使用go vet作为检测使用 L Locker // 根据需求初始化不同的锁,如*Mutex 和 *RWMutex notify notifyList // 通知列表,...原创 2019-10-24 20:04:06 · 3691 阅读 · 0 评论 -
Golang实现优雅退出
Golang中的信号处理 1.信号类型 每个平台的信号定义或许有些不同。下面列出了POSIX中定义的信号。 Linux 使用34-64信号用作实时系统中。 命令 man signal 提供了官方的信号介绍。 在POSIX.1-1990标准中定义的信号列表信号 值 动作 说明 SIGHUP ...原创 2019-08-14 17:44:53 · 4965 阅读 · 0 评论 -
Golang中path/filepath包
path/filepath包下的相关函数1. ToSlash函数func ToSlash(path string) string功能:将path中平台相关的路径分隔符转换成'/'例如:windows当前路径: D:\gopro\src\study,转换之后D:/gopro/src/study2. FromSlash函数func FromSlash(path strin...原创 2019-06-28 16:41:25 · 5459 阅读 · 0 评论 -
Golang os包下常用的系统相关操作
环境变量相关1. Getenv函数func Getenv(key string) string功能:获取系统key的环境变量,如果没有环境变量就返回空示例:func main() {gopath := os.Getenv("GOPATH")fmt.Println(gopath)}2. Setenv函数func Setenv(key,...原创 2019-05-15 20:04:01 · 2876 阅读 · 0 评论 -
Golang os包下常用的文件相关操作
一、文件操作的相关方法// File represents an open file descriptor.type File struct {*file // os specific}File表示打开的文件描述符操作File的常用函数:1.Create函数func Create(name string) (*File, error) { ...原创 2019-05-15 19:59:03 · 2410 阅读 · 0 评论 -
Golang并发模型的示例
并发模型Go 的并发属于 CSP 并发模型的一种实现,CSP 并发模型的核心概念是:“不要通过共享内存来通信,而应该通过通信来共享内存”。要找出10000以内所有的素数,这里使用的方法是筛法,即从2开始每找到一个素数就标记所有能被该素数整除的所有数。直到没有可标记的数,剩下的就都是素数。下面以找出10以内所有素数为例,借用 CSP 方式解决这个问题。从上图中可以看...原创 2019-05-10 19:23:19 · 714 阅读 · 0 评论 -
Golang http之client源码详解
http客户端介绍 http 是典型的 C/S 架构,客户端向服务端发送请求(request),服务端做出应答(response)。本文章主要介绍Golang中http客户端的相关源码,源码主要在net/http/client.go中。源码版本号为1.10.3一个简单的http 客户端请求例子:package mainimport ( "log" "fmt"...原创 2019-04-19 16:46:01 · 5514 阅读 · 0 评论 -
Golang http之server源码详解
http 是典型的 C/S 架构,客户端向服务端发送请求(request),服务端做出应答(response)。HTTP server–简而言之就是一个支持http协议的服务,http是一个相对简单的请求—响应的协议,通常是运行在TCP连接之上, 通过客户端发送请求到服务端,获取服务端的响应。我们先看一个简单的http server例子 package main...原创 2019-04-19 16:27:32 · 1808 阅读 · 0 评论 -
Golang http之transport源码详解
使用golang net/http库发送http请求,最后都是调用 transport的 RoundTrip方法中。type RoundTripper interface { RoundTrip(*Request) (*Response, error)}RoundTrip代表一个http事务,给一个请求返回一个响应。RoundTripper必须是并发安全的。RoundTrip...原创 2019-04-16 20:09:27 · 11161 阅读 · 1 评论 -
Golang切片和数组底层详解
切片是 Go 中的一种基本的数据结构,使用这种结构可以用来管理数据集合。切片的设计想法是由动态数组概念而来,为了开发者可以更加方便的使一个数据结构可以自动增加和减少。但是切片本身并不是动态数据或者数组指针。切片常见的操作有 reslice、append、copy。与此同时,切片还具有可索引,可迭代的优秀特性。一. 切片和数组关于切片和数组怎么选择?接下来好好讨论讨论这个问题。在 G...转载 2018-03-31 18:22:09 · 4760 阅读 · 0 评论 -
Golang垃圾回收机制详解
Golang 从第一个版本以来,GC 一直是大家诟病最多的。但是每一个版本的发布基本都伴随着 GC 的改进。下面列出一些比较重要的改动。v1.1 STWv1.3 Mark STW, Sweep 并行v1.5 三色标记法v1.8 hybrid write barrierGC 算法简介这一小节介绍三种经典的 GC 算法:引用计数(reference counting)、标记-清扫(ma...转载 2019-02-23 15:00:32 · 2169 阅读 · 0 评论 -
Golang中go关键字实现原理
goroutine的主要特征是创建它们的初始内存成本很低廉(大约4k)以及根据需要动态增长和缩减占用的资源。go关键字 在Go语言中,表达式go f(x, y, z)会启动一个新的goroutine运行函数f(x, y, z)。函数f,变量x、y、z的值是在原goroutine计算的,只有函数f的执行是在新的goroutine中的。显然,新的goroutine不能...原创 2019-02-23 17:23:25 · 1539 阅读 · 0 评论 -
Golang中defer关键字实现原理
defer和go一样都是Go语言提供的关键字。defer用于资源的释放,会在函数返回之前进行调用。一般采用如下模式:f,err := os.Open(filename)if err != nil {panic(err)}defer f.Close() 如果有多个defer表达式,调用顺序类似于栈,越后面的defer表达式越先被调用。...原创 2019-02-23 17:38:23 · 2800 阅读 · 2 评论 -
Golang中闭包的实现原理
闭包的实现闭包是由函数及其相关引用环境组合而成的实体(即:闭包=函数+引用环境)。Go中的闭包闭包是函数式语言中的概念,Go语言是支持闭包的,这里只是简单地讲一下在Go语言中闭包是如何实现的。func f(i int) func() int { return func() int { i++ return i }}函数f返回...原创 2019-02-25 18:02:44 · 2051 阅读 · 0 评论 -
Golang中Channel的实现原理
CSP模型 要想理解 channel 要先知道 CSP 模型。CSP 是 Communicating Sequential Process 的简称,中文可以叫做通信顺序进程,是一种并发编程模型,由 Tony Hoare 于 1977 年提出。简单来说,CSP 模型由并发执行的实体(线程或者进程)所组成,实体之间通过发送消息进行通信,这里发送消息时使用的就是通道,或者叫 channe...原创 2019-02-25 18:19:20 · 973 阅读 · 0 评论