随笔分类 - golang
摘要:kratos 跨域支持: package server import ( kratosHttp "github.com/go-kratos/kratos/v2/transport/http" "github.com/gorilla/handlers" ) // NewHTTPServer new a
阅读全文
摘要:Go gRPC 是一个高性能、开源的 RPC 框架,它支持通过 Protocol Buffers 进行序列化和反序列化,提供了简单易用的 API,并且可以跨语言通信。在实际开发中,我们有时需要在 gRPC 方法之间传递一些额外的参数,例如请求头信息、跟踪 ID、取消信号等。本文将介绍在 Go gRP
阅读全文
摘要:假设有个a.go文件在/apis/app/account/ package main import ( "fmt" "os" ) func main() { curWD, err := os.Getwd() if err != nil { panic(err) } fmt.Println(curWD
阅读全文
摘要:什么是 parseTime=true 参数 parseTime=true 是一个 MySQL 数据库连接参数,它告诉 MySQL 驱动程序将日期时间类型的值解析为 time.Time 类型。在 MySQL 中,日期时间类型的值可以表示为字符串,例如 2022-07-01 13:30:00。默认情况下
阅读全文
摘要:在并发编程中,重复执行相同操作可能会浪费计算资源和时间,导致重复的网络请求,甚至产生不一致的结果。为了解决这些问题,Go 语言提供了一个名为 singleflight 的同步库和归并回源算法,它们可以避免重复执行相同操作,提高程序的性能和可靠性。 singleflight 库提供了一个 Group
阅读全文
摘要:总结 1. omitempty是省略的意思 2. json中字段若有omitempty标记,则这个字段为空时,json序列化为string时不会包含该字段 3. json中字段若没有omitempty标记,则这个字段为空时,json序列化为string时会包含该字段 看代码 package main
阅读全文
摘要:被引入的response.proto的文件: syntax = "proto3"; package response; option go_package = "github.com/TripleCGame/apis/api/response;response"; import "google/pr
阅读全文
摘要:本章主要介绍了如何在 proto 文件中引入其他 proto 文件。 1. 概述 Protocol buffers 是一种语言无关、平台无关的可扩展机制或者说是数据交换格式,用于序列化结构化数据。与 XML、JSON 相比,Protocol buffers 序列化后的码流更小、速度更快、操作更简单。
阅读全文
摘要:一个简单的 protobuf 文件定义如下: response.proto syntax = "proto3"; option go_package = "github.com/TripleCGame/apis/api;api"; import "google/protobuf/struct.pro
阅读全文
摘要:引用自:https://blog.csdn.net/m0_57116438/article/details/121693943 通常在for循环中,使用break可以跳出循环,但是注意在go语言中,for select配合时,break并不能跳出循环。 func testSelectFor(chEx
阅读全文
摘要:1.异常处理 Golang 没有结构化异常,使用 panic 抛出错误,recover 捕获错误。 异常的使用场景简单描述:Go中可以抛出一个panic的异常,然后在defer中通过recover捕获这个异常,然后正常处理。 1.1. panic 内置函数假如函数F中书写了panic语句,会终止其后
阅读全文
摘要:1.概述 测试是开发过程的重要部分,也是软件开发生命周期的关键部分。 它可以确保应用程序正常运行和满足客户需求。 本文将涵盖关于 Go 测试的所有须知事项。 我们将从一个简单的测试函数开始,通过更多工具和策略帮助您掌握 Go 中的测试。 在一个流程规范的项目里,如果想发布一行代码到生产环境,都需要完
阅读全文
摘要:先给答案是可以访问的, 看下实例: package main import ( "fmt" ) type person struct{} func(p *person) sayHi(){ fmt.Println("hi") p.sayHi2() } func(p *person) sayHi2(){
阅读全文
摘要:1. 前言 关于内存泄漏的情形已经在之前文章总结过了,本文将讨论如何发现内存泄漏。 2. 怎么发现内存泄露 在Go中发现内存泄露有2种方法,一个是通用的监控工具,另一个是go pprof: 2.1. 监控工具 定周期对进程的内存占用情况进行采样,数据可视化后,根据内存占用走势(持续上升),很容易发现
阅读全文
摘要:1. 什么是死锁? 死锁并不是锁的一种,而是一种错误使用锁导致的现象,死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。系统发生死锁现象不仅浪费大量的系统资源,甚至导致整个系统崩溃,带来灾难性后果。所以,对于死锁问题在理
阅读全文
摘要:1.什么是 GC 在计算机科学中,垃圾回收(GC)是一种自动管理内存的机制,垃圾回收器会去尝试回收程序不再使用的对象及其占用的内存。 最早 John McCarthy 在 1959 年左右发明了垃圾回收,以简化 Lisp 中的手动内存管理的机制(来自 @wikipedia)。 2.为什么要 GC 手
阅读全文
摘要:1.内存泄漏归纳 简单归纳一下,还是“临时性”内存泄露和“永久性”内存泄露: 临时性泄露,指的是该释放的内存资源没有及时释放,对应的内存资源仍然有机会在更晚些时候被释放,即便如此在内存资源紧张情况下,也会是个问题。这类主要是 string、slice 底层 buffer 的错误共享,导致无用数据对象
阅读全文
摘要:1. Context详解 在 Go 语言中 context 包允许传递一个 “context” 到程序中。 Context 如超时或截止日期(deadline)或通道,来指示停止运行和返回。例如,如果正在执行一个 web 请求或运行一个系统命令,定义一个超时对生产级系统通常是个好主意。因为,如果依赖
阅读全文
摘要:今天采用WaitGroup来实现协程,发现range chanel会死锁,代码如下:package main import "sync"import "fmt"func main() { var wg sync.WaitGroup wg.Add(3) resultChannel := make(ch
阅读全文
摘要:今天在调试的时候发现有个内部变量调试到一半被释放了。 执行一段时间以后authUidArray的值变成乱码了: 我当时一脸懵逼,重来没有见过这种事情,直接颠覆我的认知,值哪里去了?c/c++/python/js可重来没有出现这种情况 以至于我还重启了电脑,重启了code,结果发现都是这样。 当然试了
阅读全文

浙公网安备 33010602011771号