随笔分类 - Golang
摘要:HTTP接口和RPC接口都是生产上常用的接口,顾名思义,HTTP接口使用基于HTTP协议的URL传参调用,而RPC接口则基于远程过程调用。 RPC(即Remote Procedure Call,远程过程调用)和HTTP(HyperText Transfer Protocol,超文本传输协议),前者是
阅读全文
摘要:概述 gRPC 和 HTTP 是两种常见的网络通信协议,用于在客户端和服务器之间进行通信。它们具有不同的特点和适用场景,下面进行详细比较。 HTTP(Hypertext Transfer Protocol) 特点: 1)简单易用:HTTP 使用简单的请求方法和状态码来进行通信,如 GET、POST、
阅读全文
摘要:1、概述 1.1 什么是gRPC RPC的全称是Remote Procedure Call,远程过程调用。RPC是一种协议,它实际是提供了一套机制,使得应用程序之间可以进行通信,而且也遵从server/client模型。使用的时候客户端调用server端提供的接口就像是调用本地的函数一样。 而gRP
阅读全文
摘要:1、使用下载的老版goland ide工具,使用debug模式无法正常生效: 异常信息是因为goland中的dlv.exe版本太老,也就是dlv.exe不能适配最新的go版本: error layer=debugger could not patch runtime.mallogc: no type
阅读全文
摘要:密码学有很多较快的算法是基于c或c++纂修,而工程上主要以go语言为主,在此梳理一些go调用c常见问题和用例。有很多奇特的方式进行传输,但是想要性能最优还是以指针传输作为主要传输方式。 一些简单的计算可以直接使用c编写成.h进行引用,但在工程部署常常拥有大量依赖库,若在服务器上部署时间太慢,还可能存
阅读全文
摘要:1. go-micro简介 Go Micro是一个插件化的基础框架,基于此可以构建微服务,Micro的设计哲学是可插拔的插件化架构 在架构之外,它默认实现了consul作为服务发现(2019年源码修改了默认使用mdns),通过http进行通信,通过protobuf和json进行编解码 2. go-m
阅读全文
摘要:Go 语言提供了另外一种数据类型即接口,它把所有的具有共性的方法定义在一起,任何其他类型只要实现了这些方法就是实现了这个接口。 package main import ( "fmt" ) type Phone interface { call() } type NokiaPhone struct {
阅读全文
摘要:一、概念 Go标准库提供了Cond原语,sync.Cond(条件变量)是一个用于在多个goroutine之间进行同步和通信的重要工具,可以让 Goroutine 在满足特定条件时被阻塞和唤醒。 条件变量的作用并不保证在同一时刻仅有一个协程(线程)访问某个共享的数据资源,而是在对应的共享数据的状态发生
阅读全文
摘要:WaitGroup的介绍 WaitGroup就是package sync用来做任务编排的一个并发原语,这个要解决的就是并发-等待的问题:现有一个goroutine A在检查点(chaeckpoint)等待一组goroutine全部完成,如果在执行任务的这些goroutine还没有全部完成,那么gor
阅读全文
摘要:一、什么是可重入锁 var mu sync.Mutex func main() { mu.Lock() mu.Lock() } 这段 Go 程序会阻塞吗?不会,会报以下错误: fatal error: all goroutines are asleep - deadlock! Go 显然是不支持可重
阅读全文
摘要:为什么要做优化 互联网公司本质是将用户共通的行为流程进行了集中化管理,通过中心化的信息交换达到效率提升的目的,同时用规模效应降低了数据交换的成本。 用人话来讲,公司希望的是用尽量少的机器成本来赚取尽量多的利润。利润的提升与业务逻辑本身相关,与技术关系不大。而降低成本则是与业务无关,纯粹的技术话题。这
阅读全文
摘要:代码重构是在不改变外部功能的情况下对现有代码进行改进。它是编程的核心部分之一,不容忽视,否则就无法获得更好的代码版本。代码重构可以增强代码的可读性、可维护性和可扩展性,它还旨在提高性能和开发人员的工作效率。 如何重构 在寻找重构的技术之前,看看如何将代码重构集成到编码过程中。以下建议可用于此目的:
阅读全文
摘要:背景:Golang服务通过docker部署在了线上环境中,但是该服务经常出现内存爆满导致容器自动被kill而退出的现象。因为是线上环境,排查问题会耗时很长,因此先在线上服务的容器上加了个–restart=always的参数,这样可以让容器退出后自动重启,继续进行任务。但在排查内存爆满问题时,线上环境
阅读全文
摘要:sync.Pool 是 sync 包下的一个组件,用来提高对象复用几率,减少gc的压力,减少内存分配,它是并发安全的,常用来存储并复用临时对象。 任何存放区其中的值可以在任何时候被删除而不通知,在高负载下可以动态的扩容,在不活跃时对象池会收缩。 可伸缩的,其大小仅受限于内存的大小,可以被看作是一个存
阅读全文
摘要:一、除数为0 a := 1 b := 0 c := a / b fmt.Println(c) 二、调用接口未实现的方法 三、数组下标越界、字符串越界(运行时错误,对于静态类型语言,数组下标越界是致命错误) 1)数组下标越界 package main import "fmt" func main()
阅读全文
摘要:1.不占空间内存 在 Go 中,可以使用 unsafe.Sizeof 计算出一个数据类型实例需要占用的字节数。 package main import ( "fmt" "unsafe" ) func main() { fmt.Println(unsafe.Sizeof(struct{}{})) }
阅读全文