golang grpc

golang中for select时,如果channel关闭会怎么样?

首先,如果对于一个已经关闭的channel来说,如果此时channel里还有值,则会正确读到channel里的值,且返回的第二个bool值为true;如果关闭前,channel里的值已经被读完,则最后返回的则是channel的零值; 那么针对该问题,我们通过代码来验证一下: package main ......
channel golang select for

golang sqlite3 cgo 静态编译方法

https://xiazemin.github.io/MyBlog/golang/2020/04/13/statically.html go build -o release/main_linux_amd64 -ldflags '-linkmode "external" -extldflags "- ......
静态 sqlite3 方法 golang sqlite

golang打包成windows和linux

1.先用 go env 命令查看当前信息 如果GOOS=windows代表当前打包环境是windows的 go build -o 包名 main.go 打包直接为exe程序 打包linux需要执行 set GOOS=linux 将打包环境改为linux 这样打包就是linux的了 ......
windows golang linux

gosec 基于ast 的golang 安全检查工具

gosec 基于ast 的golang 安全检查工具,核心是基于了一些rule 进行安全的处理 参考使用 安装 官方提供了对应操作系统的包,安装就可以了,也可以使用go install 命令安装 使用 当然gosec 还有其他命令可以选择,具体可以通过gosec 查看 gosec . 参考资料 ht ......
工具 golang gosec ast

算法 in Golang:Selection sort(选择排序)

# 算法 in Golang:Selection sort(选择排序) ## Selection Sort(选择排序) 假设有一个数组,它里面有6个元素,它的顺序是乱的,现在我们想对这个数组进行排序,就是从小到大进行排序。 选择排序是挨个遍历元素,把最小的放在最前面,再把剩余的遍历,把最小的放在后面 ......
算法 Selection Golang sort in

Golang高性能编程--slice的学习总结

在go语言中,数组变量属于值类型,因此当一个数组变量被复制或者传递时,实际上会复制整个数组。eg,将a赋值给b,修改a中的元素,并不会修改b中的元素。为了避免复制数组,一般会传递指向数组的指针。 package main import "fmt" func main() { a := [...]in ......
高性能 Golang slice

golang中关于websocket的使用的一些高级用法

很多网站都实现了“推送”功能,都会用到轮训这个技术,轮询就是每隔一段时间客户端就向服务器发送请求,来获得最新的数据。这种方式的缺点十分明显,浏览器每次发出的请求都含有比较大的header数据,浪费带宽资源。在这种背景下,HTML5定义了websocket协议,能够更好的节省服务器资源和带宽,而且可以 ......
websocket golang

grpc 与http比较,具有哪些优势

1. 更高的性能:gRPC使用Protocol Buffers作为默认的数据序列化工具,相比于JSON等文本格式,它的编码和解码速度更快,传输的数据量更小,因此可以更快地处理大量的请求和响应。 2. 更小的带宽占用:由于使用二进制数据格式,gRPC的数据传输量比HTTP更小,因此可以降低网络传输的带 ......
优势 grpc http

写给go开发者的gRPC教程-通信安全

使用 TLS 安全传输数据 什么是 SSL/TLS SSL 包含记录层(Record Layer)和传输层[1],记录层协议确定传输层数据的封装格式。传输层安全协议使用X.509[2]认证,之后利用非对称加密演算来对通信方做身份认证,之后交换对称密匙作为会话密匙(Session key[3])。这个 ......
开发者 教程 gRPC

算法 in Golang:D & C(分而治之)

# 算法 in Golang:D & C(分而治之) ### D & C 算法(策略) - Divide & Conquer - 属于递归算法的一种 - 其实它更像是一种思路、策略 ### 递归 - 递归 Recursion - 基线条件 Base Case - 递归条件 Recursive Cas ......
算法 Golang amp in

Golang Web--中间件的学习总结

关于在golang中的中间件,可以翻阅笔者之前的博客,在这里不予详细说明。这里简单介绍下中间件的高级用法: 1.如果每个路由分别要配置多个中间价,该如何处理 2.如果有多个路由分别要配置多个中间件,该如何处理 3.尝试不定义结构体开发中间件 package main import ( "contex ......
中间件 Golang Web

极客时间--golang并发编程实战课--Cond的学习总结

Go标准库的Cond目的是:为等待/通知场景下的并发问题提供支持。Cond通常应用于等待某个条件的一组goroutine,等条件变为true的时候,其中一个goroutine或者所有的goroutine都会被唤醒。 Cond是和某个条件相关,这个条件需要一组goroutine协作共同完成,当条件还没 ......
实战 时间 golang Cond

极客时间--golang并发实战课--Mutex的常见使用错误场景

1.Lock/Unlock 没有成对出现,就意味着会出现死锁的情况,或者是因为 Unlock 一个未加锁的 Mutex 而导致 panic。 2.第二种误用是 Copy 已使用的 Mutex。 Package sync 的同步原语在使用后是不能复制的。原因在于,Mutex 是一个有状态的对象,它的 ......
实战 场景 常见 错误 时间

极客时间--golang并发编程实战课--WaitGroup学习总结

什么是WaitGroup? WaitGroup解决的就是并发-等待问题:现在有一个goroutineA在检查点等待一组goroutine全部完成,如果 在执行任务的这些goroutine还没全部完成,那么goroutine A就会阻塞在检查点,知道所有goroutine都完成后才能继续执行。 Gol ......
实战 WaitGroup 时间 golang

golang深入理解指针

## Golang中的指针 指针的概念:指针地址,指针类型,指针取值 两个符号:*:根据地址取值,&:取地址 ## 关于指针 变量是用来存储数据的,变量的本质是给存储数据的内存地址起了一个好记的别名。 ```shell a:=1 //直接通过a这个变量来读取内存中保存的1这个值。在计算机底层a这个变 ......
指针 golang

Golang标准库之bytes介绍

本次主要介绍golang中的标准库`bytes`,基本上参考了 [字节 | bytes](https://cloud.tencent.com/developer/section/1140520) 、[Golang标准库——bytes](https://www.jianshu.com/p/e6f7f2 ......
标准 Golang bytes

golang 学习之 etcd protobuffer grpc 服务注册发现 go-micro

#1.etcd使用步骤 ####1)下载:https://github.com/etcd-io/etcd/releases/ ####2)配置环境变量 ####3)编辑local-cluster-profile文件:(利用goreman 启动方式,生产环境参考官方文档) ``` etcd1: etc ......
protobuffer go-micro golang micro etcd

golang的打点定时器

## 定时器 方式1:使用time.NewTicker(时间间隔)来设置定时器 ```go // 定时器, 定义一个1秒间隔的定时器 ticker := time.NewTicker(time.Second) n := 0 for i := range ticker.C { fmt.Println( ......
定时器 golang

trc golang 进程请求追踪包

trc 是一个方便的golang 进程请求追踪框架,可以提供方便的请求追踪查看 参考使用 代码来说官方示例,完整的可以查看官方 package main import ( "context" "fmt" "log" "math/rand" "net/http" "net/http/httptest" ......
进程 golang trc

go语言中protobuf以及grpc的使用

#### 首先定义数据结构,保存为.proto文件 ```protobuf syntax = "proto3"; package tutorial; // The protocol compiler generates a class from the following .proto file w ......
protobuf 语言 grpc

golang实现设计模式之享元模式总结-代码、优缺点、适用场景

享元模式是一种结构型的设计模式,通过共享细粒度对象实现对象的复用,从而达到减少对象创建与销毁,减少内存消耗,其本质是本质是缓存共享对象,降低内存消耗。 享元模式的定义提出了两个要求,细粒度和共享对象。因为要求细粒度,所以不可避免地会使对象数量多且性质相近,此时我们就将这些对象的信息分为两个部分:内部 ......
模式 设计模式 优缺点 场景 代码

golang依赖注入工具digo

# golang依赖注入工具 digo工具地址:[https://github.com/werbenhu/digo](https://github.com/werbenhu/digo) ## 特性 - 使用注释中的注解 - 自动代码生成 - 自动检测循环依赖 - 编译时期依赖注入 - 自动初始化 - ......
工具 golang digo

从源码角度剖析 golang 如何fork一个进程

# 从源码角度剖析 golang 如何fork一个进程 创建一个新进程分为两个步骤,一个是fork系统调用,一个是execve 系统调用,fork调用会复用父进程的堆栈,而execve直接覆盖当前进程的堆栈,并且将下一条执行指令指向新的可执行文件。 在分析源码之前,我们先来看看golang fork ......
源码 进程 角度 golang fork

Golang 协程/线程/进程 区别以及 GMP 详解

# Golang 协程/线程/进程 区别详解 > 转载请注明来源:https://janrs.com/mffp *** # 概念 **进程** 每个进程都有自己的独立内存空间,拥有自己独立的地址空间、独立的堆和栈,既不共享堆,亦不共享栈。一个程序至少有一个进程,一个进程至少有一个线程。进程切换只发生 ......
线程 进程 Golang GMP

golang实现设计模式之构建者模式总结-代码、优缺点、适用场景

构建者模式也是一种创建型的设计模式,该模式将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的对象。大白话就是,构建者模式,从输出角度看依然是创建个对象实例,但是构建者模式更关注创建的细节,或者说一个对象的创建可以拆分为多个步骤,所有的步骤完成才创建出这个对象实例,而对于之前分享的工厂 ......
模式 设计模式 优缺点 场景 代码

Golang Slice:强大的动态数组数据结构

在编程世界中,数组是一种基本的数据结构,它允许我们存储相同类型的元素集合。Go语言中的数组具有固定的长度,这意味着一旦创建,它们的大小就无法改变。然而,Go语言提供了一种强大的内置数据结构,称为切片(slice),它克服了这个限制并提供了类似动态数组的功能。在本文中,我们将探讨Go语言中的切片概念, ......
数据结构 数组 结构 动态 数据

优雅实现golang默认参数

原生的golang中,函数定义不支持默认参数。但是在实际开发过程中,经常会有些参数用户可以不关心或者可以根据实际情况去定制实现,这个时候需要使用到默认参数,在C++中,函数的定义和实现本来就支持默认参数,如果需要在golang中实现默认参数,可以参考一下做法: package main import ......
参数 golang

golang vscode开发环境配置

1.下载go安装包并安装 [官网下载地址](https://go.dev/doc/install "官网下载地址") 2.下载vscode并安装 [官网下载地址](https://code.visualstudio.com/Download "官网下载地址") 3.安装vscode go语言开发扩展 ......
环境 golang vscode

【tcp】记一次grpc接口测试的三次挥手

1、现象 平时都是四次挥手,为啥没有服务端确认的ack呢 2、解释 (84条消息) 为什么书上说是 TCP 四次挥手,但是实际会出现 TCP 三次挥手?_tcp挥手 只抓到3_倾听铃的声的博客-CSDN博客 ~$ cat /boot/config-4.15.0-1 config-4.15.0-163 ......
接口 grpc tcp

golang实现设计模式之抽象工厂模式总结-代码、优缺点、适用场景

抽象工厂模式也是一种创建型的设计模式,其是在工厂模式的基础上实现更高程度的内聚。我们知道在工厂模式中,一种产品类就需要新建个对应的工厂类生成产品的实例,这会有什么问题呢? 虽然工厂模式解决了简单工厂模式不好扩展的问题,实现了OCP,但一种产品就需要新建一个工厂类,比如有10000种产品,是不是也是新 ......
模式 设计模式 优缺点 场景 工厂