单向golang grpc

golang简单实现CLHLock,不可重入的clh自旋锁

如果不想自旋,可以把Lock、waitIsFinish和noticeIsFinish代码中的方式2注释掉,改用方式1。不过实际测试在低并发的情况下,自旋的执行效率更高,要根据实际业务场景选择使用哪种方式。 源代码如下: import ( "runtime" "sync/atomic" ) const ......
CLHLock golang clh

net/rpc和GRPC的区别

Go语言自带的 `net/rpc` 和 `gRPC` 是两种不同的远程过程调用(RPC)框架,它们在设计、功能和使用场景上都有所不同。以下是它们之间的主要区别: 1. **协议**: - **net/rpc**: 默认使用Go特有的Gob编码,这意味着它主要用于Go服务之间的通信。 - **gRPC ......
GRPC net rpc

Golang之旅——内存管理

## 转载放在最前 [一文带你了解,虚拟内存、内存分页、分段、段页式内存管理](https://zhuanlan.zhihu.com/p/451736494)[[Golang三关-典藏版]一站式Golang内存洗髓经 | Go 技术论坛](https://learnku.com/articles/6 ......
内存 之旅 Golang

golang网络编程

Go语言的网络编程主要使用 net 包来实现。该包提供了一组基本的网络功能,包括 TCP 和 UDP 套接字、IP 地址和端口号的处理、以及一些高级特性,如非阻塞 I/O 和 HTTP 客户端库。 ......
网络编程 golang 网络

golang 构造函数的应用

在Go语言中,没有类似于传统面向对象编程语言中的构造函数的概念。然而,你可以使用初始化函数来达到类似的效果。 在Go中,结构体(struct)是一种用于封装一组相关字段的数据类型。你可以为结构体定义一个初始化函数,该函数在创建结构体实例时自动调用,用于设置字段的初始值。这个初始化函数通常被命名为结构 ......
函数 golang

golang之协程+chan通道

[管道] 分为 有缓冲和无缓冲两种 无缓冲: 1)接受者与发送者必然存在于两个协程, 否则会造成互相等待 死锁的情况 顺序执行多协程: var ch1 = make(chan int) var stopFlag = make(chan bool) // 保证两个协程顺序执行 go func() { ......
通道 golang chan

golang 学习笔记

1. 函数调用时传递的参数为拷贝的副本, 在函数内部改变参数的值不会影响原变量。但是 golang 中 slice、map、channel、pointer、function 是引用类型,赋值时拷贝的是指针值,对这些变量作出修改时会影响原变量的值。2. array(数组)与 slice(切片) 的区别 ......
笔记 golang

Golang - 原生go-sql-driver:出现invalid connection报错

在使用go-sql-driver/msqyl驱动过程中,偶现invalid connection错误,字面上看就是无效连接的意思。 开始以为是数据库压力问题或是网络不好,后来发现服务器和数据库是走内网的,网络出现问题几率非常小;只是在测试服务器上跑,没多少连接,不存在压力问题。 golang数据库驱 ......

.Net Core gRpc调用

[toc] # 简介 - 高性能、开源的通用 RPC 框架 - 实现不同语言相互调用 - [官网](https://grpc.io/) - [Protobuf 消息参考](https://learn.microsoft.com/zh-cn/aspnet/core/grpc/protobuf?view ......
Core gRpc Net

使用golang解决LeetCode热题Hot100(1-10)

# 使用golang解决LeetCode热题Hot100 ## 1.两数之和 ### https://leetcode.cn/problems/two-sum/ #### 题目 给定一个整数数组 `nums` 和一个整数目标值 `target`,请你在该数组中找出 **和为目标值** *`targe ......
LeetCode golang Hot 100 10

golang1.21新特性速览

经过了半年左右的开发,golang 1.21 在今天早上正式发布了。 这个版本中有不少重要的新特性和变更,尤其是在泛型相关的代码上。 因为有不少大变动,所以建议等第一个patch版本也就是1.21.1出来之后再进行升级,以免遇到一些意外的bug带来麻烦。 好了,一起来看看1.21带来的新特性吧。 本 ......
特性 golang1 golang 21

golang自定义 os.stderr 数据读取逻辑

## 原始需求 只是一个很简单的需求, 使用golang的exec运行一个命令然后获取实时结果, 命令是 ``` bash trivy image --download-db-only ``` 正常的打印应该是 ``` bash 2023-08-08T17:06:02.929+0800 INFO N ......
逻辑 数据 golang stderr os

golang之操作kafka

安装第三方包: go get github.com/IBM/sarama 生产者实例: package main import ( "fmt" "github.com/IBM/sarama" ) func main() { //1.生产者配置 config := sarama.NewConfig() ......
golang kafka

golang trace view 视图详解

> 大家好,我是蓝胖子,在golang中可以使用go pprof的工具对golang程序进行性能分析,其中通过go trace 命令生成的trace view视图对于我们分析系统延迟十分有帮助,鉴于当前对trace view视图的介绍还是很少,在粗略的看过trace统计原理后,我将对这部分做比较详细 ......
视图 golang trace view

Golang交叉编译

Golang交叉编译主要依赖几个参数:GOOS、GOARCH和CGO_ENABLED。 | 参数 |作用 | | | | |GOOS |交叉编译的OS | |GOARCH |交叉编译的CPU架构 | |CGO_ENABLED |设置为0时,编译出的二进制是静态的,也就是说没有外部的依赖。 | 编译在 ......
Golang

prometheus的sdk client_golang 使用 定时器

之前线上监控的agent都是直接 time.Sleep(time.Duration(collectInterval) * time.Second) ,多少有些许的low,每次开始采集数据的时间都是从程序开始执行就开始采集,很显然这种偷懒的方式是不合理的。 1、简单复制粘贴一下 func AbNorm ......

反转单向链表

## 反转单向链表 时间复杂度:O(N) 空间复杂度:O(1) ```c void reverse_list (node** head_ptr) { node* prev = NULL; node* curr = *head_ptr; node* next = NULL; while (curr ! ......
单向

golang中float64 保留小数点后指定的位数

代码如下: // Decimal float64 保留小数点后位数 // value float64 浮点数 // prec int 需保留小数点后的位数 func Decimal(value float64,prec int) float64 { value, _ = strconv.ParseF ......
小数点 小数 位数 golang float

golang之性能分析工具pprof

PProf 是一个 Go 程序性能分析工具,可以分析 CPU、内存等性能。Go 在语言层面上集成了 profile 采样工具,只需在代码中简单地引入 runtime/ppro 或者 net/http/pprof 包即可获取程序的 profile 文件,并通过该文件来进行性能分析。 在 gin 中使用 ......
性能分析 性能 工具 golang pprof

[golang]使用mTLS双向加密认证http通信

## 前言 假设一个场景,服务端部署在内网,客户端需要通过暴露在公网的nginx与服务端进行通信。为了避免在公网进行 http 明文通信造成的信息泄露,nginx与客户端之间的通信应当使用 https 协议,并且nginx也要验证客户端的身份,也就是mTLS双向加密认证通信。 这条通信链路有三个角色 ......
双向 golang mTLS http

Go / Golang JSON 一些心得

## 自定义序列化和反序列化 可以实现 json.Marshaler 和 json.Unmarshaler 自定义json的序列化和反序列化 ``` type Tags []string func (t Tags) MarshalJSON() ([]byte, error) { return []b ......
心得 Golang JSON Go

golang 实现图片上绘制文字

```golang package main import ( "github.com/golang/freetype" "image" "image/draw" "image/png" "io/ioutil" "log" "os" ) // TextInfo 文字信息 type TextInfo ......
文字 golang 图片

golang之浮点数处理库decimal

decimal库包是用来解决float类型对象之间运算不准确的问题的。所以,如果你想使用decimal库包,你必须先把float类型对象通过decimal.NewFromFloat()函数转成decimal.Decimal类型,然后再计算,最后还得再转成你所需要的类型。 范例: package ma ......
点数 decimal golang

golang之路由库gorilla/mux

gorilla/mux是 gorilla Web 开发工具包中的路由管理库。gorilla Web 开发包是 Go 语言中辅助开发 Web 服务器的工具包。它包括 Web 服务器开发的各个方面, 有表单数据处理包gorilla/schema, 有 websocket 通信包gorilla/webso ......
路由 gorilla golang mux

初识Go(Golang)语言

# 初识Go(Golang)语言 ## Go的诞生 ~~~go 1.Go语言的发展历程 2007 年,谷歌工程师 Rob Pike, Ken Thompson 和 Robert Griesemer 开始设计一门全新的语言,这是Go 语言的最初原型。 2009 年 11 月 10 日,Google 将 ......
语言 Golang Go

[Go笔记] 基础-01: Golang发展简史、著名项目及基本使用

一起了解Go语言的发展史、采用Go语言的知名公司、GO开发工具、环境搭建、 代码结构、代码风格以及如何使用官方库API文档。 ......
简史 基础 笔记 项目 Golang

gRPC Test

[TOC] ghz github:https://github.com/bojand/ghz ghz官方文档:https://ghz.sh/ # 简单使用 下载后解压,将目录配置到path上,方便命令调用: ```bash ghz --insecure --proto xxx\Hello.proto ......
gRPC Test

golang 接口的概念

先上代码 定义一个接口 Retriever 两个接口的实现 infra.go ```go package main import ( "fmt" "robot.com/Robot/learngo/testing" //"robot.com/Robot/learngo/infra" ) // ?: S ......
接口 概念 golang

如何通过gRPC传输文件

在gRPC中,可以通过将文件分割成多个小块,然后使用流式RPC将这些小块发送到服务器来传输文件。以下是一个简单的示例,展示了如何在gRPC中实现文件传输。 首先,我们需要定义一个服务来处理文件传输。在`.proto`文件中,我们可以定义一个`UploadFile`服务,它接收一个流式的`Chunk` ......
文件 gRPC

从一道面试题来谈谈Golang中的 ==

写这篇文章的时候,已经离我找工作有一段时间了,但是觉得这道题不管是面试还是日常的工作中,都会经常遇到,所以还是特意写一篇文章,记录下自己对Golang中`==`的理解。如文章中出现不对的地方,请不吝赐教,谢谢。 > 注意,以下文章内容是基于 go1.16.4 进行演示的,如果和你验证时,结果不一致, ......
一道 Golang