标签: Go

晴天 | 2023-12-20 | 后端相关Go

一文搞懂Go中select的随机公平策略:并发编程的黄金法则

1. 引言 今天呢,咱们来聊聊 Go 语言的那点事儿,尤其是咱们在并发处理中常用的 select 语句,它可是处理并发时的一把利剑! Go 语言的 select 语句,仿佛是编程世界中的一位冷静的裁判,当多个通道(channel)全都争着抢话语权的时候,它就会站出来,公平地判决谁应当先发声。 换句话说, select 可以在多个通道之间等待并选择可用的通道执行操作。 你得这么看select语句——它是并发编程领域里的一块重要的拼图,没有这块,你画出的并发图景就不完整。 首先,我们来看一个简单的示例: select { case <-chan1:  // 操作1 case data := <-chan2:  // 操作2 case chan3 <- data:  // 操作3 default:  // 默认操作 } 还别说,这几行代码,简单明了,但它背后可是隐藏着深邃的并发处理智慧: 1. select

 444 |  0 |  0 后端相关Go

晚风 | 2023-05-06 | JavaGo

Java与Go到底差别在哪,谁要被时代抛弃?

01基础语法 Golang : 编码风格及可见域规则严格且简单; Java: 来说层次接口清晰、规范。主要表现有以下几个: 1.1变量 1.1.1 变量声明及使用 Java :变量可以声明了却不使用。 public static String toString(int num) { int data = num; return String.valueOf(num); } Golang :声明的变量必须被使用,否则需要使用_来替代掉变量名,表明该变量不会比使用到。 func toString(num int) string { data := num // data没有使用者,无法编译 return strconv.Itoa(num) } func toString(num int) string { _ := num // 正常编译 return strconv.Itoa(num) } 1.1.2 变量声明及初始化 J

 703 |  1 |  0 JavaGo

青木 | 2023-04-12 | DubboGo

Go 语言体系下的微服务框架选型: Dubbo-go

本文介绍了Go 微服务体系发展与选型,过去一年Dubbo-go 社区的飞速发展以及对未来的展望。 一、Go 微服务体系发展与选型 随着微服务技术的快速发展,其在各个领域都形成了一系列事实标准,在 Kubernetes 和容器技术加持下,云原生微服务已经成为了主流解决方案。而 Go 语言作为云原生领域最受欢迎的开发语言,正被越来越多的企业作为微服务开发的首选语言,其中比较流行的包括 Go-micro、Go-zero、Dubbo-go 等。作为 Dubbo 微服务体系中多语言实现的一员,在 2022 年 Dubbo-go 以微服务领跑者的角色积极拥抱云原生标准,探索了 Proxyless Mesh 形态,配合适配 Pixiu 云原生网关,形成了完善的 Dubbo-go 微服务生态矩阵。 以 Dubbo-go 为中心的微服务体系在多个知名企业中成功落地和实践,框架的稳定性在实际场景下经受住了考验。截止今年已有 60+ 家企业在我们的用户列表中登记,其中较为典型案例请参考文章《小米电商 Apache Dubbo-go 微服务实践》。小米电商选用了 Dubbo-go...

 769 |  0 |  0 DubboGo

iron Man | 2023-04-09 | 后端相关Go

GO 如何利用高阶函数写出优雅的代码

前言 go项目中经常需要查询db,按照以前java开发经验,会根据查询条件写很多方法,如: GetUserByUserID GetUsersByName GetUsersByAge 每一种查询条件写一个方法,这种方式对外是挺好的,对外遵循严格原则,让每个对外的方法接口是明确的。但是对内的话,应该尽可能的通用,做到代码复用,少写代码,让代码看起来更优雅、整洁。 问题 在review代码的时候,针对上面3个方法,一般写法是 go func GetUserByUserID(ctx context.Context, userID int64) ( User, error){ db := GetDB(ctx) var user User if userID 0 { db = db.Where( userID = ? , userID) } if err := db.Model( err != nil { return nil, err

 566 |  0 |  0 后端相关Go

心如止水 | 2023-03-31 | Go

Golang整洁架构实践

01为什么要有代码架构 历史悠久的项目大都会有很多开发人员参与“贡献”,在没有好的指导规则约束的情况下,大抵会变成一团乱麻。剪不断,理还乱,也没有开发勇士愿意去剪去理。被迫接手的开发勇士如果想要增加一个小需求,可能需要花10倍的时间去理顺业务逻辑,再花 10 倍的时间去补充测试代码,实在是低效又痛苦。 这是一个普遍的痛点问题,有无数开发者尝试过去解决它。这么多年发展下来,业界自然也诞生了很多软件架构。大家耳熟能详的就有六边形架构(Hexagonal Architecture),洋葱架构(Onion Architecture),整洁架构(Clean Architecture)等。 这些架构在细节上有所差异,但是核心目标是一致的:致力于实现软件系统的 关注点分离 (separation of concerns)。 关注点分离之后的软件系统都具备如下特征: 不依赖特定 UI。 UI 可以任意替换,不会影响系统中其他组件。从 Web UI 变成桌面 UI,甚至变成控制台 UI 都无所谓,业务逻辑不会被影响。 不依赖特定框架。 以 JavaScri...

 1257 |  0 |  0 Go

晴天 | 2023-03-24 | Go

Go语言 是如何调用 chatGpt openai api 接口的 ?

ChatGPT是什么? ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列任务。 这款AI语言模型,让撰写邮件、论文、脚本,制定商业提案,创作诗歌、故事,甚至敲代码、检查程序错误都变得易如反掌。 ChatGPT会抢谁的“饭碗”?我们如何正确看待? ChatGPT的迅速普及有可能颠覆许多行业。纽约大学计算机科学与电气工程系副教授Chinmay Hegde认为,新闻、高等教育、图形和软件设计等行业的某些工作——这些工作有被AI代替的风险。 Go语言 是如何调用 chatGpt openai api 接口 安装 go-gpt3.5 g

 6287 |  5 |  5 Go

大牛猫 | 2023-02-25 | JavaGo

被问到 Java 和 Go 的区别,没答出来?

后端 题目一 Java 和 C 、Go 语言的区别,各自的优缺点? 官方解析 Java、C 和 Go 都是流行的编程语言,它们各自有着自己的特点和优缺点。 Java 是一种面向对象的编程语言,最初被设计用于开发嵌入式系统,现在已广泛应用于企业应用、Web 应用和移动应用开发等领域。Java 的优点包括: 平台性强(跨平台) :Java 虚拟机(JVM)可以在不同的操作系统上运行 Java 程序,使得开发者可以编写一次代码并在多个平台上运行; 安全性高 :Java 有很多安全特性,例如自动内存管理、类的访问权限控制、异常处理等,可以有效避免一些常见的安全漏洞; 生态系统完备 :Java 的生态系统非常完善,有很多成熟的框架和工具可以帮助开发者快速构建复杂的应用。C 是一种系统级编程语言,最初被设计用于操作系统和系统软件的开发,现在也广泛应用于游戏、图形图像处理、嵌入式系统等领域。C 的优点包括: 性能高 :C 是一种编译型语言,可以生成高效的机器代码,所以在处理大量数据和对计算效率有

 1408 |  0 |  0 JavaGo

会飞的小猪_1 | 2023-02-19 | Go

Go 语言学习技巧和编程思维

一、了解 Go 语言 了解 Go 语言背景 学习 Go 语言,首先要了解 Go 语言,Go 是于 2009 年 11 月开源,然后最终在 2012 年上半年的时候发布了 Go 1.0 稳定版本,主要是由 Google 主导开发。目前 Go 有一个非常活跃的社区,现在很多互联网公司的后端开发很多都是用 Go 语言开发了,当然了,这个目前还动摇不了 Java 的统治地位。 Go 发展势头这么快,更多的是得益于云原生,因为当前阶段云原生已经是风生水起,而云原生相关系统的实现,绝大多数都是 Go 来实现的,比如 K8s、Istio、Docker、Etcd 等。 探讨 Go 的未来 我们去看一种语言能不能有一个好的未来,主要看如下几点: 社区是否活跃和丰富、开发者们是否能够接收社区的一些建议。目前发展势头较好的语言,比如 Java、C/C 社区一定是非常活跃的,参与的人数会非常多,并且也能很好的和社区进行交换意见。 是否有一些工业化的标准。像 C/C 、Java 这些编程语言都是有标准化组织的。尤其是 Java,它在架构上还搞出了像 J2EE 这样

 741 |  1 |  0 Go