静态强类型、编译型、并发型,并具有垃圾回收功能的编程语言
做Go开发的,肯定少不了用反射——解析Tag、拿字段偏移、获取类型信息,ORM、序列化、配置绑定这些地方都要用到。
当你需要 Clean Architecture、DDD、Hexagonal、AOP、IoC 这类方法论来治理复杂系统时,Go 的克制设计通常会让这些方法论更依赖...
当你在GOMODULE模式下引入一个新的依赖时,Go工具链会下载依赖包并计算其哈希值。在更新go.sum之前,为了确保下载的依赖包是真实可靠的,go命令会查询G...
在日常开发中,我们有时会遇到这样的场景:需要用C语言调用Go语言编写的函数。这时,//export 指令就派上了用场。
作为软件工程师,我们都在努力编写整洁、可维护且易于测试的代码。我们遵循最佳实践,阅读软件设计书籍,并进行严格的代码审查。但如果我们一些根深蒂固的习惯实际上是隐蔽...
在实时应用开发中,我们常需要同时提供 HTTP 接口(用于常规请求)和 WebSocket 服务(用于实时双向通信)。那 Go 语言能否高效兼顾这两者?答案是:...
在日常的Go语言开发中,我们大多数时候都在与类型安全的代码打交道。但当你需要与底层系统交互、进行高性能优化或处理特殊场景时,就不得不接触Go语言中的"禁区"——...
在日常的Go项目开发中,你是否经常遇到这样的场景:反复输入一长串go build命令,需要记住复杂的编译参数,或者团队中不同成员使用的构建命令不一致?这些痛点都...
在日常Go开发中,我们经常面临这样的选择:到底该使用结构体还是结构体指针?这篇文章就来聊聊这个话题,帮助大家彻底理解它们的区别和使用场景。
在日常使用Go语言进行开发时,我们经常会使用goroutine来实现并发操作。但很多开发者可能会思考一个问题:我能否在一个goroutine中直接终止另一个go...
在日常的Go语言开发中,判断字符串是否为空是最常见的操作之一。你会发现代码中主要有两种写法:len(s) == 0 和 s == ""。你是否和我有同样的困惑,...
在日常阅读Go语言源码时,我们经常会看到各种以//go:开头的特殊注释。这些看似普通的注释,实际上是Go编译器提供的一组强大工具,它们可以直接影响编译过程,优化...
在Go语言开发中,map是高频使用的键值对容器,大家对它的扩容机制可能比较熟悉,但缩容机制却常常被忽略。不少开发者会误以为“删除元素就会释放内存”,实则Go m...
其中writeLock()为全程互斥锁,单个goroutine启动写入后,其他goroutine读写操作被阻塞,直至锁释放。此特性保障单次写入独占性,为字符完整...
在Go开发中,相对路径引用不一致是常见问题:本地go run main.go正常,打包二进制或换目录启动则易出现“文件找不到”。
在日常Go语言开发中,我们经常会遇到any和interface{}这两种表示"任意类型"的方式。自从 Go 1.18 引入泛型后,any这个新关键字似乎正在逐渐...
在分布式系统中,不同服务间的高效通信是核心需求之一。RPC、gRPC与Protobuf作为一套协同工作的技术组合,广泛应用于微服务、跨语言通信等场景。本文将逐一...
在 Go 1.24 之前,如果你要在团队里统一用 air 做热重载、用 staticcheck 做静态检查、用 stringer 自动生成 String() 方...
“如果它走起来像鸭子,叫起来也像鸭子,那它就是鸭子。” —— Go 语言的接口哲学