自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Go中国

Golang语言相关的资讯推送。

  • 博客(1253)
  • 收藏
  • 关注

转载 “类型名称”在Go语言规范中的演变

Go语言规范(The Go Programming Language Specification)[1]是Go语言的核心文档,定义了该语言的语法、类型系统和运行时行为。Go语言规范的存在使得开发者在实现Go编译器时可以依赖一致的标准,它确保了语言的稳定性和一致性,特别是在类型系统设计中,Go团队通过规范推动了语言的简洁性、稳定性与可维护性。对于Go开发者而言,Go语言规范也是语法特性使用的参考手册...

2024-09-26 10:37:01

转载 htmx:Gopher走向全栈的完美搭档?

在传统的Web开发领域,前端和后端开发通常被明确划分。前端主要负责用户界面的交互和视觉呈现,运用HTML、CSS和JavaScript等技术;后端则专注于服务器逻辑、数据库管理和核心功能实现,常用Go、Java、PHP、Ruby等语言。然而,随着技术的不断演进和开发流程的优化,全栈开发逐渐成为一种趋势。全栈开发者能够在项目的不同阶段灵活转换角色,有效降低沟通成本和缩短开发周期。他们对系统的整体架构...

2024-09-23 15:23:13 39

转载 如何用Go来构建LLM应用

随着大型语言模型(LLM)及其相关工具(如嵌入模型)在过去一年中能力显著提升,越来越多的开发者考虑将LLM集成到他们的应用程序中。由于LLM通常需要专用硬件和大量计算资源,它们通常作为网络服务打包,提供API供访问。这就是OpenAI和Google Gemini等领先LLM的API工作方式;即使是像Ollama这样的自托管LLM工具,也将LLM封装在REST API中以供本地使用。此外,利用LLM...

2024-09-18 09:43:02 109

转载 Go unique包:突破字符串局限的通用值Interning技术实现

Go的1.23版本中引入了一个新的标准库包unique[2],为Go开发者带来了高效的值interning能力。这种能力不仅适用于字符串类型值,还可应用于任何可比较(comparable)类型的值。本文将简要探讨interning技术及其在Go中的实现方式,通过介绍unique包的功能,帮助读者更好地理解这一技术及其实际应用。1. 从string interning技术说起通常提到internin...

2024-09-18 09:39:29 48

转载 从“黑神话:悟空”看Go为什么不适合AAA游戏开发

2024年8月20日,国产AAA游戏《黑神话:悟空》正式发布!凭借其卓越的画面表现、成熟的玩法和令人惊叹的技术细节,迅速引爆了全球游戏市场,在上线不到一周的时间内,全平台已经大卖超1000万套,一举成为全球游戏玩家瞩目的焦点,并获得普遍的好评。作为一款AAA级大作,它不仅在艺术设计上精益求精,背后更是依托于极高的技术标准。这类游戏的开发对编程语言和技术栈的要求十分严苛,尤其是在图形渲染、物理引擎、...

2024-09-13 17:06:06 201

转载 Go 错误处理指北:Error vs Exception vs ErrNo

很多有其他编程语言经验的人初次接触 Go 语言时,想必对 if err != nil 的错误处理方式感到新奇,之后用久了,竟发现有点令人抓狂。因为很多人不满 Go 语言的错误处理方式,甚至有人做了一张梗图:哈哈????,不吹不黑,本文就来对比下 Python、C 以及 Go 这三种编程语言中的异常处理机制,看看你更喜欢哪一种。Python 错误处理因为我接触的第一门编程语言是 Python,所以我就先讲...

2024-09-10 08:30:41 94

转载 「GoTeam 招聘时间」Answer.AI -后端开发工程师

本期招聘企业—Answer.AI公司团队简介我们是 Answer.AI, 美国教育行业排名第一的AI tutor。我们致力于将 AI 应用于教育行业,推动教育平等化。团队成员包含多位连续创业者,团队成员来自于字节跳动、Meta、快手、小米、百度、创新工场等。诚邀对人工智能充满热情、有志于探索大模型在教育领域应用的伙伴加入我们的团队。公司更多介绍详见:https://mp.weixin.qq....

2024-09-06 08:02:17 110

转载 IEEE Spectrum 2024排行榜:Rust和TypeScript崛起,Go语言表现如何?

IEEE Spectrum发布了2024年度编程语言排行榜[1],这份榜单被业界视为权威之一,不仅揭示了一些有趣的趋势,还提供了多维度的语言评估。这里我们也将基于2024榜单,看看编程语言界有哪些新趋势和新变化,特别聚焦于Rust和TypeScript的强势崛起,同时也将探讨Go语言在不同维度上的表现。可能很多人对该榜单不是很熟悉,这里先介绍一下它的数据源以及评估方法。1. 榜单评估方法:全面而深...

2024-09-05 11:31:04 295

转载 Go 1.23引入的新Bug?其实只是文档没看仔细

上个月中旬,Go 1.23版本正式发布!这也是Russ Cox作为Go tech leader的最后一个发布版本,他本人在该版本中做出重要贡献,那就是解决了一直困扰Go团队的Timer/Ticker的GC回收问题,进而解决了Timer的Stop和Reset很难正确使用的问题。不过,就在昨天,一个叫tulir的gopher提出的issue(ttps://github.com/golang/go/is...

2024-09-03 10:11:31 62

转载 Go机器学习框架之火重燃,Google前研究员开源期望媲美Jax的GoMLX

Go作为一门兼具高性能与简洁性的编程语言,近年来在各种领域得到广泛应用。然而,在机器学习领域,Go相比Python、C++、Julia等语言,生态仍然较为薄弱。目前的Go机器学习框架无论在功能全面性上,还是在社区生态支持上都难以与TensorFlow、PyTorch、Jax等重量级框架抗衡。究其原因,笔者觉得还是Go社区缺少熟悉和精通机器学习方面的人才。不过,随着时间的推移,总会有一些开发者会尝试...

2024-08-29 12:24:35 246

转载 Go 程序如何实现优雅退出?来看看 K8s 是怎么做的——下篇

本文带大家一起来详细学习下 Go 中的优雅退出,由于文章过长,拆分成上下两篇,本文为下篇。上篇:《Go 程序如何实现优雅退出?来看看 K8s 是怎么做的——上篇》K8s 的优雅退出现在,我们已经掌握了 Go 中 HTTP Server 程序如何实现优雅退出,是时候看一看 K8s 中提供的一种更为优雅的优雅退出退出方案了????。这要从 K8s API Server 启动入口说起:https://gith...

2024-08-27 08:02:52 77

转载 Go 程序如何实现优雅退出?来看看 K8s 是怎么做的——上篇

本文带大家一起来详细学习下 Go 中的优雅退出,由于文章过长,拆分成上下两篇,本文为上篇。在写 Go 程序时,优雅退出是一个老生常谈的问题,也是我们在微服务开发过程中的标配,本文就来介绍下工作中常见的几种优雅退出场景,以及带大家一起来看一下 K8s 中的优雅退出是怎么实现的。优雅退出我们一般可以通过如下方式执行一个 Go 程序:$gobuild-omainmain.go$./main...

2024-08-23 08:01:05 71

转载 继Ollama之后,Go在AI领域再下一城

AI isn't a thing; it's a magnifier of a thing. And that thing is human creativity.在AI领域,最火的使用Go开发的项目莫过于Ollama项目了,但近期有一个项目也吸引了Gopher眼球,它就是fabric。叫fabric的项目太多,这个fabric又是一个怎样的项目呢?这里我就为大家简单介绍一下。danielmies...

2024-08-20 09:03:33 61

转载 取代底层开发者!这才是程序员未来5年最好的就业方向!

随着GPT大热“AI大模型”无疑是最火爆的话题!Google、百度、腾讯等巨头互联网公司,无不在布局人工智能技术和市场,为挖掘会用AI的后端相关人才甚至开出60k*16薪的高薪抢人作为普通程序员,如何站在时代前沿,享受AI技术带来的红利?!????知乎知学堂特发起:行业前沿资源——AI大模型公开课已为本号粉丝开通免费领取权限预计24小时后关闭通道!速进!AI大模型-重塑程序员核心竞争力(不限年龄!不...

2024-08-18 13:12:35 55

转载 Go 1.23 版本发布啦,这些重大更新你一定要知道!

Go 1.23 版本介绍在 Go 1.22 版本发布 6 个月之后,Go 1.23 于北京时间 2024 年 8 月 14 日凌晨 1:03 正式发布。此次更新的主要变化集中在工具链、运行时和库的实现上。让我们一起来看看 Go 1.23 带来了哪些新变化吧!准备好了吗?准备一杯你最喜欢的咖啡或茶,随着本文一探究竟吧。快速安装您可以从下载页面下载二进制和源代码发行版:https://go.dev/d...

2024-08-16 10:13:37 403

转载 没有什么不可能:修改 Go 结构体的私有字段

在 Go 语言中,结构体(struct)中的字段如果是私有的,只能在定义该结构体的同一个包内访问。这是为了实现数据的封装和信息隐藏,提高代码的健壮性和安全性。但是在某些情况下,我们可能需要在外部包中访问或修改结构体的私有字段。这时,我们可以使用 Go 语言提供的反射(reflect)机制来实现这一功能。即使我们能够实现访问,这些字段你没有办法修改,如果尝试通过反射设置这些私有字段的值,会 pani...

2024-08-12 11:59:03 100

转载 Go的GMP模型真的“简单”

前言关于GMP模型网上已经有很多文章,讲的内容大多都是如下图的逻辑,本系列不再赘述。本系列换个视角,核心搞清楚两个问题:GMP到底是什么?goroutine如何恢复和保存上下文的?正文开始。GMP只是结构体GMP并不是你想象的那么神奇的存在,其实就是普通的结构体,如同你写业务代码定义的结构体一样,如下://Goroutine//代码位置:go1.19/src/runtime/proc.go...

2024-08-07 08:01:44 69

转载 使用TLA+形式化验证Go并发程序

Writing is nature's way of letting you know how sloppy your thinking is - Guindon在2024年6月份举办的GopherCon Europe Berlin 2024[1]上,一个叫Raghav Roy的印度程序员(听口音判断的)分享了Using Formal Reasoning to Build Concurrent G...

2024-08-05 13:10:24 106

转载 一个全新的 Go pprof 视角 - 对象引用分析

在Go语言开发中,内存泄漏问题往往难以定位,传统的Pprof工具虽然能提供一定帮助,但在复杂场景下其能力有限。为了更高效地分析和解决这些问题,CloudWeGo 团队开发了一款新的工具——Goref。Goref 基于 Delve,能够深入分析Go程序的堆对象引用,显示内存引用的分布,帮助开发者快速定位内存泄漏或优化GC开销。该工具不仅支持运行时进程的分析,还能分析核心转储文件,为 Go 开发者提供...

2024-07-31 08:30:35 110

转载 在 Go 中如何使用反射实现简易版 encoding/json

在使用 Go 语言开发过程中,我们经常需要实现结构体到 JSON 字符串的序列化(Marshalling)或 JSON 字符串到结构体的反序列化(Unmarshalling)操作。Go 为我们提供了 encoding/json 库可以很方便的实现这一需求。在本文中,我们将探索如何使用 Go 的反射机制自己来实现一个简易版的 encoding/json 库。这个过程不仅能帮助我们理解序列化和反序列化...

2024-07-30 13:34:32 78

转载 Go语言中的SIMD加速:以矩阵加法为例

前些日子,一些资深Gopher,比如fasthttp[1]的作者Aliaksandr Valialkin[2]因函数迭代器[3]加入Go 1.23版本[4]而抱怨Go的演进走错了方向:朝着增加复杂性和隐式代码执行的方向发展,而没有专注于Go语言的基本设计哲学——简单性、生产力和性能。Valialkin希望Go团队能专注于一些性能打磨和优化的环节,比如使用SIMD提升一些计算场景下Go代码的性能,避...

2024-07-24 11:32:54 103

转载 Genkit:新一代基于 Go 的 AI 应用开发框架

Google 推出了 Genkit for Go,这是一个开源框架,用来以 Go 语言原生构建 AI 应用与云服务。该项目是 Google Firebase 和 Go 团队联手合作的最新成果。Genkit for Go 于 7 月 17 日正式推出,目前版本处于 alpha 阶段。Gophers 能够通过它将 Go 的性能和并发优势与 Genkit 的库和工具相结合,从而来构建生成式 AI应用程序...

2024-07-22 11:41:20 153

转载 在 Go 中如何使用 go:embed 指令嵌入静态文件

有时候,将配置文件、模板甚至整个前端应用直接嵌入到 Go 二进制文件中,是一种提高应用部署效率和简化操作的有效方法。自从 Go 1.16 版本起,Go 语言官方引入了 //go:embed 指令,这使得嵌入静态资源变得异常简单而直接。本文将详细介绍如何在你的 Go 应用中使用这一强大的特性。什么是 go:embed//go:embed 在 Go 1.16 版本中被加入,这也是我接触 Go 语言的第...

2024-07-18 13:04:27 114

转载 通过实例理解Go访问和操作数据库的几种方式

关系数据库操作是Go应用开发中的重要一环,尤其是Go Web应用、微服务等。作为Gopher,我们需要了解几种主流的数据库访问和操作方法,以便在项目中做出适当的选择。我个人在日常开发中较少涉及CRUD类应用,因此使用Go访问和操作数据库的机会并不多,在这方面也算是有一些“短板”。通过在这篇文章中对数据库访问方式进行全面的梳理,我也算是补全一下技能树,同时也能为读者小伙伴提供一些参考。我搜集了目前G...

2024-07-16 15:04:21 144

转载 震惊! Go 1.23中Timer无buffer的实现方式竟是这样!

Go 1.23 对 time.Timer 和 time.Ticker 的实现进行了两项重大更改。首先,如果程序中不再引用某个 Timer 或 Ticker,则这些定时器或计时器会立即成为垃圾回收的候选对象,即使它们的 Stop 方法尚未被调用,也会被垃圾回收掉。在 Go 的早期版本中,未停止的 Timer 只有在触发后才会被回收,而未停止的 Ticker 则永远不会被回收。其次,与 Timer 或...

2024-07-10 13:40:33 171

转载 cgo 内存优化后续 - 修了个 bug

好久没折腾 cgo,上一篇已经是去年了,cgo 内存优化无缘 golang 1.22[1] 中提到,golang 1.23 会合并回来眼看 golang 1.23 即将 freeze,于是提了个 PR[2],想着开启内存优化还有 bug很不幸的是,rsc 说之前 boringcrypto 使用了这个优化,导致了一个 CI 失败[3],需要先修复了好吧,原来上一篇里有个乌龙,上次我们说,被 reve...

2024-07-08 08:00:46 100

转载 以 Go 语言为例解释什么是伪共享以及如何解决

本文翻译自:What’s false sharing and how to solve it (using Golang as example)译文在解释伪共享(false sharing)之前,有必要简要介绍一下 CPU 架构中缓存是如何工作的。CPU 缓存中的最小单位是缓存行(cache line)(如今,CPU 中常见的缓存行大小为 64 字节)。因此,当 CPU 从内存读取一个变量时,它会...

2024-07-05 14:39:06 98

转载 Go 1.23中的自定义迭代器与iter包

在《Go 1.23新特性前瞻》[1]一文中,我们提到了Go 1.23中增加的一个主要的语法特性就是支持了用户自定义iterator,即range over func试验特性[2]的正式转正。为此,Go 1.23还在标准库中增加了iter包[3],这个包对什么是Go自定义iterator做了诠释:Aniteratorisafunctionthatpassessuccessiveele...

2024-07-04 08:00:33 142

转载 在 Go 中如何检查结构体是否为空

本文翻译自:How to Check for an Empty Struct in Go。本文概述了几种在 Go 中判断结构体是否为空的方法,适用于具有可比较字段和不可比较字段的结构体。Go 中的空结构体是指所有字段均设置为对应字段零值的结构体。使用零值字面量进行检查对于仅包含可比较字段的结构体,只需要将结构体实例与其零值字面量进行比较:packagemainimport("fmt"...

2024-07-02 09:01:12 122

转载 万字解析 Go 官方结构体化日志包 slog

slog 日志包是 Go 语言中的一个结构化日志库,旨在提供一个简单而强大的日志系统。因为标准日志库 log 过于简陋,社区中经常有人吐槽,Go 官方也承认了这一点,于是 Go 团队成员 Jonathan Amsterdam 操刀设计了新的日志库 slog,其放在 log/slog 目录中。slog 设计之初大量参考了社区中现有日志包方案,相比于 log,主要解决了两个问题:log 不支持日志级别...

2024-06-26 14:25:41 119

转载 在 Go 中如何让结构体不可比较?

最近我在使用 Go 官方出品的结构化日志包 slog 时,看到 slog.Value 源码中有一个比较好玩的小 Tips,可以限制两个结构体之间的相等性比较,本文就来跟大家分享下。在 Go 中结构体可以比较吗?在 Go 中结构体可以比较吗?这其实是我曾经面试过的一个问题,我们来做一个实验:定义如下结构体:typeNormalstruct{astringBint}使用这个结构体分...

2024-06-25 08:03:03 70

转载 Gopher的Rust第一课:Rust的依赖管理

在上一章《Gopher的Rust第一课:Rust代码组织》中,我们了解了Rust的代码组织形式,知道了基于Cargo构建项目以及Rust代码组织是目前的标准方式,同时Cargo也是管理项目外部依赖的标准方法,而项目内部的代码组织则由Rust module来完成。在这一章中,我们将聚焦Rust的依赖管理,即Cargo对外部crate依赖的管理操作。我将先介绍几种依赖的来源类型(来自crates.io...

2024-06-21 11:10:05 203

转载 Go与神经网络:线性回归

离发表上一篇与机器学习相关的文章《Go与神经网络:张量运算》[1]已经过去整整一年了,AI领域,特别是大模型领域的热度不仅未有减弱,反而愈演愈烈。整个行业变得更卷,竞争更加激烈,大模型你方唱罢我登场,层出不穷,各自能力也都在不断提升,并在自然语言处理、问答、生成等方面展现出强大的能力。同时基于RAG(Retrieval-Augmented Generation)[2]等技术,大模型还可以实时检索相...

2024-06-19 10:25:20 91

转载 在 Go 中如何优雅的使用 wire 依赖注入工具提高开发效率?下篇

在《在 Go 中如何优雅的使用 wire 依赖注入工具提高开发效率?上篇》,我讲解了 Go 语言中依赖注入工具 wire 的基本使用及高级用法。本篇就来介绍下 wire 的生产实践。Wire 生产实践这里以一个 user 服务作为示例,演示下一个生产项目中是如何使用 wire 依赖注入工具的。user 项目目录结构如下:$treeuseruser├──assets│├──cur...

2024-06-17 11:37:18 89

转载 在 Go 中如何优雅的使用 wire 依赖注入工具提高开发效率?上篇

如果你做过 Java 开发,那么想必一定听说或使用过依赖注入。依赖注入是一种软件设计模式,它允许将组件的依赖项外部化,从而使组件本身更加模块化和可测试。在 Java 中,依赖注入广泛应用于各种框架中,帮助开发者解耦代码和提高应用的灵活性。本文就来介绍下什么是依赖注入,以及在 Go 语言中如何实践依赖注入,提高 Go 项目的开发效率和可维护性。什么是依赖注入?正如前文所述,依赖注入(dependen...

2024-06-14 18:01:30 100

转载 Gopher的Rust第一课:Rust代码组织

Gopher的Rust第一课:第一个Rust程序Gopher的Rust第一课:建立Rust开发环境在上一章的讲解中,我们编写了第一个Rust示例程序"hello, world",并给出了rustc版和cargo版本。在真实开发中,我们都会使用cargo来创建和管理Rust包。不过,Hello, world示例非常简单,仅仅由一个Rust源码文件组成,而且所有源码文件都在同一个目录中。但真实世界中的...

2024-06-13 08:00:22 93

转载 Go 中空结构体的用法,我帮你总结全了!

在 Go 语言中,空结构体 struct{} 是一个非常特殊的类型,它不包含任何字段并且不占用任何内存空间。虽然听起来似乎没什么用,但空结构体在 Go 编程中实际上有着广泛的应用。本文将详细探讨空结构体的几种典型用法,并解释为何它们在特定场景下非常有用。空结构体不占用内存空间首先我们来验证下空结构体是否占用内存空间:typeEmptystruct{}vars1struct{}s2:...

2024-06-11 11:31:33 88

转载 Go 项目文件命名规范是什么?

计算机科学中只有两件难事:缓存失效和命名。—— 菲尔·卡尔顿(Phil Karlton)。在编程世界中,选择正确的命名约定是打开可读和可维护代码大门的重要途径。在使用 Go 语言开发大型项目时,文件命名是构建清晰项目结构的关键一环,一个合理的文件命名规范不仅能提高开发效率,还能降低团队协作中的沟通成本。在这篇博文中,我们将深入探讨 Go 中命名的最佳实践。在探讨 Go 文件命名规范之前,我们有必要...

2024-06-06 12:12:56 213

转载 Go 语言 mongox 库:简化操作、安全、高效、可扩展、BSON 构建

前言在 Go 语言里使用 MongoDB 官方提供的 mongo-go-driver 库进行集合操作时,你是否感到结构体与 MongoDB 集合之间的映射,以及构建 BSON 数据这些操作极其繁琐?特别是在构建 BSON 数据时,各种字段、逗号和括号的排列组合是否让你觉得仿佛在进行一场复杂的拼图游戏?如果你有同感,那么你并不孤单,我也是。因此我在想,有没有一个能让我丝滑,高效操作 MongoDB ...

2024-06-05 12:24:40 81

转载 pping: 被动式ping,计算网络时延

pping 是一个 Linux/macOS/BSD 命令行工具,它通过对活跃连接的被动监测来测量网络延迟。与 ping 不同,pping 不会注入流量(主动发送探测包)来确定 RTT(往返时间)——它报告的是正常应用流量所经历的每个数据包的 RTT。与只能在发送端点测量 RTT 的传输状态监控工具(如 ss)不同,pping 可以在发送方、接收方或连接路径上的任何位置测量 RTT(例如...

2024-06-04 13:19:43 157

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除