随笔分类 -  Golang

摘要:Map底层实现原理 Go Map是一种key-value的键值对存储结构,其中key不能重复。它是一个指针,占用8字节,指向一个hmap结构体。 Map的数据结构源代码在src/runtime/map.go中 我们通过go env 命令先找到go源代码路径 找到对应文件map.go 找到hmap结构 阅读全文
posted @ 2022-12-20 12:05 songguojun 阅读(713) 评论(1) 推荐(0) 编辑
摘要:Golang的错误设计相比php和java要简单明了。Golang是通过声明error类或者调用errors包中的New函数来实现的一种非常简单的错误处理机制。 Go 语言为错误处理定义了一个标准模式,即 error 接口,该接口的定义非常简单: type error interface { Err 阅读全文
posted @ 2021-05-19 22:34 songguojun 阅读(277) 评论(0) 推荐(0) 编辑
摘要:一. 函数式选项模式 有时候一个函数会有很多参数,为了方便函数的使用,我们会给希望给一些参数设定默认值,调用时只需要传与默认值不同的参数即可,类似于 python 里面的默认参数和字典参数,虽然 golang 里面既没有默认参数也没有字典参数,但是我们有选项模式。 阅读全文
posted @ 2021-02-11 18:00 songguojun 阅读(154) 评论(0) 推荐(0) 编辑
摘要:gRpc简介 gRPC 是Google公司开发的一个高性能、开源和通用的 RPC 框架,面向移动和 HTTP/2 设计。 gRpc官网地址:https://www.grpc.io gRpc中文文档地址:http://doc.oschina.net/grpc gRPC是一款RPC框架,那么先了解Rpc 阅读全文
posted @ 2020-10-28 23:45 songguojun 阅读(48900) 评论(0) 推荐(9) 编辑
摘要:查看go语言自带命令 查看go自带的命令,在终端输入go命令或者go help。 go主要命令解释 1. build: 编译包和依赖。 2. clean: 移除当前源码包里面编译生成的文件。 3. doc: 显示包或者符号的文档。 4. env: 打印go的环境信息,查看GOPATH,GOROOT环 阅读全文
posted @ 2020-06-20 01:16 songguojun 阅读(2231) 评论(0) 推荐(0) 编辑
摘要:一.切片(Slice) go语言中切片(Slice)和数组长的很像,可以把切片看做是对数组的一层简单的封装,在每个slice的底层数据结构中一定会包含一个数组。所以slice的功能是强大的,拥有数组的特性及slice本身所扩展的一些特性。 看下面一个例子认识下slice arr := [...]in 阅读全文
posted @ 2020-06-06 00:58 songguojun 阅读(512) 评论(0) 推荐(0) 编辑
摘要:Go-kit简介 Go-kit 并不是一个微服务框架,而是一套微服务工具集,我们可以用工具Go-kit为 Go 创建微服务,包含包和接口,有点类似于JAVA Spring Boot,但是没那么强大。可以利用Go-kit提供的API和规范可以创建健壮的,可维护性高的微服务体系,它提供了用于实现系统监控 阅读全文
posted @ 2020-06-02 02:45 songguojun 阅读(2520) 评论(0) 推荐(0) 编辑
摘要:1. golang协程为什么比线程轻量? 1. go协程调用跟切换比线程效率高。 线程是内核对外提供的服务,应用程序可以通过系统调用让内核启动线程,由内核来负责线程调度和切换。线程在等待IO操作时线程变为unrunnable状态会触发上下文切换。现代操作系统一般都采用抢占式调度,上下文切换一般发生在 阅读全文
posted @ 2020-03-17 11:43 songguojun 阅读(1055) 评论(0) 推荐(0) 编辑
摘要:Go-Micro框架简介 Go-Micro是go语言开发的微服务框架。 微服务框架和Web框架是不一样的,它们不同在于侧重点是不一样的,微服务框架主要用于微服务的搭建,包括微服务的治理等和微服务相关的,Gin是一款Web框架,主要用于搭建Web服务。当然go-micro与go-gin框架也可以集成在 阅读全文
posted @ 2019-11-03 18:49 songguojun 阅读(897) 评论(0) 推荐(0) 编辑
摘要:Protobuf介绍 Protobuf (Protocol Buffers) 是谷歌开发的一款无关平台,无关语言,可扩展,轻量级高效的序列化结构的数据格式,用于将自定义数据结构序列化成字节流,和将字节流反序列化为数据结构。所以很适合做数据存储和为不同语言,不同应用之间互相通信的数据交换格式,只要实现 阅读全文
posted @ 2019-09-20 23:53 songguojun 阅读(2021) 评论(0) 推荐(0) 编辑
摘要:引言 在Go语言中开发者在写代码时不必关心内存是如何分配和回收,从内存的分配到不再使用后内存的回收等等这些内存管理工作都是由Go在底层完成的。但是Go语言内存管理是Go语言比较重要的一部分,Go对象在内存中如何存储,Go的内存分配机制是怎么样的,Go的内存分配期是如何设计的等等,我们也是有必要了解其 阅读全文
posted @ 2019-08-07 13:26 songguojun 阅读(380) 评论(0) 推荐(0) 编辑
摘要:make()和new()函数的区别 make和new函数都是go语言的内建函数来分配内存空间的。但是还是有区别的。 1.make是用来分配引用类型的内存,比如slice,map以及channel(管道)。new是用来分配除了引用类型之外的所有其他类型,比如int,数组,struct等等。 func 阅读全文
posted @ 2019-06-23 18:51 songguojun 阅读(502) 评论(0) 推荐(0) 编辑
摘要:context介绍 Golang里的Context包非常重要,Context包是在golang 1.7之后引入的,它主要是解决如何优雅的去控制子goroutine退出。 控制并发的两种方式 1. Waitgroup: 适用于多个goroutine执行同一件事,然后一直等到所有的goroutine执行 阅读全文
posted @ 2019-05-30 13:32 songguojun 阅读(340) 评论(0) 推荐(0) 编辑
摘要:代码测试 当开发人员开发好程序后还需要对代码进行测试,可以发现程序中可能存在的问题,测试可以分为传统测试和表格驱动测试,而表格驱动的单元测试技术相比传统测试有很多优点,下面对比下。 传统测试和表格驱动测试对比 1. 传统测试 看看下面一段传统测试代码,是对一个加法函数add的单元测试,assertE 阅读全文
posted @ 2019-05-29 22:42 songguojun 阅读(403) 评论(0) 推荐(0) 编辑
摘要:特殊常量iota: 1.iota的值在遇到const关键字时将被重置为0 2.const中每新增一行常量声明将使iota计数一次,也就是自动加一。 3.iota只能在常量定义中使用。 iota常见使用方法: 1.跳值使用法; 2.插队使用法; 3.表达式隐式使用法; 4.单行使用法; package 阅读全文
posted @ 2019-04-04 21:50 songguojun 阅读(287) 评论(0) 推荐(0) 编辑
摘要:golang文本字符串操作:包含 合并 连接 分割 取索引 前缀后缀检测 消除字符串 消除空格 golang字符串操作需要用到 strings这个包 str := "hello world"//是否包含找的字符串 fmt.Println(strings.Contains(str,"hel"),str 阅读全文
posted @ 2019-03-16 00:08 songguojun 阅读(781) 评论(0) 推荐(0) 编辑
摘要:sync.Pool简介 sync.Pool是属于go标准库sync包,是一个可以分别存取的临时对象的集合。但是不是一个缓存(Cache)。 官方手册的介绍 sync.Pool的由来 Go语言是自动回收垃圾的,不用手动,这样可以减少程序员负担并提高开发效率。但是这样也有一定的副作用,在方便的同时,自动 阅读全文
posted @ 2019-03-11 22:58 songguojun 阅读(656) 评论(0) 推荐(0) 编辑
摘要:1.背景 WebSocket和http协议一样是应用层的协议,通过握手机制可以使客户端和服务端建立类似tcp的连接。在WebSocket出现之前客户端向服务器发出请求是通过http协议实现的,而http协议有个特点是通行请求只能由客户端发起,然后服务端响应查询结果,HTTP 协议没法让服务器主动向客 阅读全文
posted @ 2019-02-21 01:31 songguojun 阅读(689) 评论(0) 推荐(0) 编辑
摘要:Golang调度器 先看看golang调度的由来。 一. 单进程时代不需要调度器 在早期操作系统是单进程的,一个进程拥有整个系统的所有资源,所以也不需要调度器。 但是单进程的操作系统也有明显的缺点: 1. 采用单一的执行流程,计算机只能一个任务一个任务处理。 2. 进程阻塞所造成CPU资源的浪费。 阅读全文
posted @ 2018-07-03 21:00 songguojun 阅读(546) 评论(0) 推荐(0) 编辑
摘要:简介 Gin是一款轻量级golang框架,他在Go web开发中使用率是很高的。 Gin框架特点 1. 使用简单。 2. 并发高。 3. 内存占用少。 下图是各个web框架压测对比,吞吐量越高越好。 Gin框架安装 安装要求:go版本大于等于1.12(使用go Module) 下面开始安装 #创建项 阅读全文
posted @ 2018-06-04 22:14 songguojun 阅读(1072) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示