Go(又称 Golang )是Google开发的一种静态强类型、编译型、并发型,并具有垃圾回收功能的编程语言。
知识进阶
2022年3月15日,争议非常大但同时也备受期待的泛型终于伴随着Go1.18发布了。
可是因为Go对泛型的支持时间跨度太大,有非常多的以“泛型”为关键字的文章都是在介绍Go1.18之前的旧泛型提案或者设计,而很多设计最终在Go1.18中被废弃或发生了更改。并且很多介绍Go1.18泛型的文章(包括官方的)都过于简单,并没对Go的泛型做完整的介绍,也没让大家意识到这次Go引入泛型给语言增加了多少复杂度(当然也可能单纯是我没搜到更好的文章)
出于这些原因,我决定参考 The Go Programming Language Specification ,写一篇比较完整系统介绍Go1.18 泛型的文章,这可能是目前介绍Go泛型比较全面的文章之一了。
本文力求能让未接触过泛型编程的人也能较好理解Go的泛型,所以行文可能略显啰嗦,相信看完这篇文章你能获得对Go泛型非常全面的了解。
Go源码包括哪些、查看标准库源代码、查看Go语言底层实现
实际上带命名的返回参数,比较带有 Go 的风格,就是显式命名了返回。
但也会带来可能存在的函数内返回的省略,以至于很多人新入门的朋友看不懂。又或是像是文章内所介绍的,带命名的返回参数写着写着变成递归函数,一手抖也是会出现的。
之前在 Go 社区分享知识和经验时,经常会听见诸如:less is more、少即是多,大道至简、大道不停地至简等黑话。
甚至讨论 Go issues 和提案时,都会有人用 “less is more” 来反驳或做为论点支撑,非常有意思。大家都会很好奇,出处是哪里,是什么意思?
在做新的应用选型时,我们会进行应用编程语言的选择,这时会纠结 Java、PHP、Go...各种,会思考有没有致命的问题,不能用?
可以明确的是,Go 没有非常致命的问题,否则你我他都不会在这里相遇,也不会大火。
难受的点倒是有不少,今天就和大家一起来看看。
上手实操
Istio、Go-kit、Go-kratos、Go-micro、Go-zero、Goa、gizmo、Dubbo-go、Jupiter、Tars-go
当前在公司进行Go服务端研发工作时,发现缺少Go开发的最佳实践,而导致以下现象:
1.用Go开发时会比较迷茫,不知如何下手,怎么开展工作比较高效。
2.重复造轮子比较严重。
3.项目的代码质量参差不齐,导致交付的产品质量参差不齐。
4.产品运行黑盒,可观测性差,能跑就行。
5.代码实现考验研发人员水平,但顶尖的毕竟是少数,往往比较差,而且顶尖也说不准会犯错。
6.一个人负责整个功能开发,一旦人员离职,代码维护就会难上艰难。
......
本文将简单回顾https的握手流程,并解释什么是JA3指纹以及如何用Go定制专属的JA3指纹,各位读者可以跟着作者的思路逐步构建自己专属的JA3指纹。
我们通过一个系列文章跟大家详细展示一个 go-zero 微服务示例,整个系列分十篇文章,目录结构如下:
1.环境搭建
2.服务拆分
3.用户服务
4.产品服务
5.订单服务
6.支付服务
7.RPC 服务 Auth 验证
8.服务监控
9.链路追踪
10.分布式事务(本文)
期望通过本系列带你在本机利用 Docker 环境利用 go-zero 快速开发一个商城系统,让你快速上手微服务。
面试真题
面试官:“写过C/C++的同学都知道,调用著名的malloc和new函数可以在堆上分配一块内存,这块内存的使用和销毁的责任都在程序员。一不小心,就会发生内存泄露。那你说下Golang 是怎么处理这个问题的”
胖虎:“Golang 通过逃逸分析,对内存管理进行的优化和简化,它可以决定一个变量是分配到堆还栈上。”
本文与大家聊一聊Go语言的函数调用惯例,调用惯例是调用方和被调用方对于参数和返回值传递的约定,Go语言的调用惯例在1.17版本进行了优化,下面就让我们看一下两个版本的调用惯例是什么样的吧~
1.数组和切片有什么区别?
2.拷贝大切片一定比拷贝小切片代价大吗?
3.切片的深浅拷贝
4.零切片、空切片、nil切片是什么
5.切片的扩容策略
6.参数传递切片和切片指针有什么区别?
7.range遍历切片有什么要注意的?
热门问答
- Golang通道不理解之处
- Golang 参数为接口类型怎么读取属性
- 这段go代码是什么意思?
- Golang的map不能修改元素?
- Golang打印一个结构体结果是一个整型?
- Golang的interface为什么不能接收int?
- golang 的第三方包管理机制和 Python 有什么不同?
- 从 Golang 的 context 中读写数据为什么是并发安全的?
课程推荐
《7 天玩转 GO 语言》 本门课程为图文课程
Go 语言的入门到精通:
指的不应只是掌握基础语法,熟悉模块源码
更重要的是可以独立开发系统,并且可以应用go的思想解决工作中的问题
这门课不单是写给0基础人看的入门级教程,更是提供给已经有编程思想,特别是熟练其它后端语言的同学的完美通关教程
在这门课程里,你会获得:
1.资深其他编程语言程序员(例如Java、C++、PHP等)转Go 开发的避坑指南;
2.系统化的掌握Go 语言编程思路,并能解决实际问题;
3.2个项目实战,理解coding 的一些基本思路和 golang 社区的一些玩法。
PS:大家想看哪些方面的技术内容,可以在评论区留言喔 ~
如有问题可以添加小姐姐微信~
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。