Go语言-让我印象深刻的13个特性

简介: 我们正在加速进入云原生时代,Go语言作为云原生的一块基石,确有它的独到之处。本文介绍Go语言的几个让我印象深刻的特性。

我们正在加速进入云原生时代,Go语言作为云原生的一块基石,确有它的独到之处。本文介绍Go语言的几个让我印象深刻的特性。

1、兼顾开发效率和性能

Go语言兼顾开发效率和性能。可以像Python那样有很快的开发速度,也可以像C++那样有很快的执行速度。

2、编译速度很快

编译速度很快,减少编译等待时间。其实编译时间长,对开发人员未必是坏事,可以有个正当理由摸鱼了,哈哈!

3、没有面向对象的束缚

Go语言有些面向对象的特性,没有太多面向对象的束缚,但是一样可以做到代码复用。

Go语言虽然不是面向对象的语言,但是依然支持面向对象的开发模式,只是没有继承这种特性。

Go语言推荐使用组合而非继承的设计模式,只需要将一种类型嵌入到另一种类型,就能复用所有的功能。

4、自带垃圾回收器

自带垃圾回收器,不需要用户自己管理内存。

5、最吸引我的特性 — 并发

Go语言最吸引我的特性的是它天生对并发的支持。采用了类似虚拟线程的概念,使用很少的代码,占用更少的内存,就可以写出复杂的并发程序。

Go语言的并发同步模型,是以消息传递为模型。通过通道(channel)在各个goroutine之间传递消息,来实现同步访问,而非通过对数据加锁来实现同步,这一点与其他语言不同。

Go语言内部实现了一个逻辑处理器,每个逻辑处理器对应一个线程,每个逻辑处理器可以处理多个并发程序。正是因为这种并发程序不会独占线程的方式,所以Go语言的并发会占用更少的线程和内存。

6、独特的接口实现机制

Go语言具有独特的接口实现机制,允许用户对行为进行建模,而不是对类型进行建模。

在Go语言中,不需要声明某个类型实现了某个接口,编译器会自动判断一个类型的实现是否符合正在使用的接口。

说白了就是不需要强制指定某个类实现了某个接口。

7、独特的_符号

Go语言的_特性是为了让程序的可读性更强,Go编译器不允许声明导入某个包却不使用,也不允许在函数中声明了某个变量却不使用。

8、init函数

Go语言中可以定义init函数,程序中每个代码文件里的init函数都会在main函数执行前调用。

9、允许一个函数返回多个值

Go语言中允许一个函数返回多个值,单就这一点就可以让程序员写代码更舒心了,有时候代码写的很舒畅的时候,突然为了几个简单的返回值再去定义一个对象,实在有点糟心。

10、所有的变量都以值的方式传递。

Go语言中,所有的变量都以值的方式传递。指针变量有点特殊。因为指针变量的值是所指向的内存地址,在函数间传递指针变量,是在传递这个地址值,所有依旧被看做以值的方式在传递。

11、支持闭包

Go语言支持闭包,在闭包里并不是拿到外部变量的副本,而是直接访问外层函数作用域中声明的这些变量本身。

12、关键字Defer

Defer后的代码会在函数返回时才会执行。哪怕函数意外奔溃终止,也能保证Defer安排的函数会被执行。

引入这个关键字的初衷是为了提高代码可读性。可以将打开、关闭资源的代码成对靠近的写在一起,避免了try...catch...finally这样散落的代码组织形式。

13、函数和方法

Go语言有些函数式编程的特性。Go语言中有函数和方法,他俩的区别是:如果声明的函数带有接受者,则是方法。

方法的接受者分为:指针接受者值接受者。使用指针接受者的方法,只能使用指针类型调用。使用值接受者的方法,使用指针类型和值类型都可以调用。

参考文献:《Go语言实战》

本篇完结!感谢你的阅读,欢迎点赞 关注 收藏 私信!!!

原文链接:http://www.mangod.top/articles/2023/10/03/1696298408810.htmlhttps://mp.weixin.qq.com/s/cKCo1KcK1HOjSHMGLBQZaw

相关文章
|
19小时前
|
安全 测试技术 数据库连接
使用Go语言进行并发编程
【5月更文挑战第15天】Go语言以其简洁语法和强大的并发原语(goroutines、channels)成为并发编程的理想选择。Goroutines是轻量级线程,由Go运行时管理。Channels作为goroutine间的通信机制,确保安全的数据交换。在编写并发程序时,应遵循如通过通信共享内存、使用`sync`包同步、避免全局变量等最佳实践。理解并发与并行的区别,有效管理goroutine生命周期,并编写测试用例以确保代码的正确性,都是成功进行Go语言并发编程的关键。
|
20小时前
|
数据采集 监控 Java
Go语言并发编程:Goroutines和Channels的详细指南
Go语言并发编程:Goroutines和Channels的详细指南
10 3
|
19小时前
|
数据采集 人工智能 搜索推荐
快速入门:利用Go语言下载Amazon商品信息的步骤详解
本文探讨了使用Go语言和代理IP技术构建高效Amazon商品信息爬虫的方法。Go语言因其简洁语法、快速编译、并发支持和丰富标准库成为理想的爬虫开发语言。文章介绍了电商网站的发展趋势,如个性化推荐、移动端优化和跨境电商。步骤包括设置代理IP、编写爬虫代码和实现多线程采集。提供的Go代码示例展示了如何配置代理、发送请求及使用goroutine进行多线程采集。注意需根据实际情况调整代理服务和商品URL。
快速入门:利用Go语言下载Amazon商品信息的步骤详解
|
19小时前
|
存储 编译器 Go
Go语言学习12-数据的使用
【5月更文挑战第5天】本篇 Huazie 向大家介绍 Go 语言数据的使用,包含赋值语句、常量与变量、可比性与有序性
40 6
Go语言学习12-数据的使用
|
20小时前
|
Java Go
一文带你速通go语言指针
Go语言指针入门指南:简述指针用于提升效率,通过地址操作变量。文章作者sharkChili是Java/CSDN专家,维护Java Guide项目。文中介绍指针声明、取值,展示如何通过指针修改变量值及在函数中的应用。通过实例解析如何使用指针优化函数,以实现对原变量的直接修改。作者还邀请读者加入交流群深入探讨,并鼓励关注其公众号“写代码的SharkChili”。
14 0
|
19小时前
|
存储 缓存 Java
来聊聊go语言的hashMap
本文介绍了Go语言中的`map`与Java的不同设计思想。作者`sharkChili`是一名Java和Go开发者,同时也是CSDN博客专家及JavaGuide项目的维护者。文章探讨了Go语言`map`的数据结构,包括`count`、`buckets指针`和`bmap`,解释了键值对的存储方式,如何利用内存对齐优化空间使用,并展示了`map`的初始化、插入键值对以及查找数据的源码过程。此外,作者还分享了如何通过汇编查看`map`操作,并鼓励读者深入研究Go的哈希冲突解决和源码。最后,作者提供了一个交流群,供读者讨论相关话题。
16 0
|
19小时前
|
Java Go
Go语言学习11-数据初始化
【5月更文挑战第3天】本篇带大家通过内建函数 new 和 make 了解Go语言的数据初始化过程
19 1
Go语言学习11-数据初始化
|
19小时前
|
自然语言处理 安全 Java
速通Go语言编译过程
Go语言编译过程详解:从词法分析(生成token)到句法分析(构建语法树),再到语义分析(类型检查、推断、匹配及函数内联)、生成中间码(SSA)和汇编码。最后,通过链接生成可执行文件。作者sharkchili,CSDN Java博客专家,分享技术细节,邀请读者加入交流群。
24 2
|
19小时前
|
Java Linux Go
一文带你速通Go语言基础语法
本文是关于Go语言的入门介绍,作者因其简洁高效的特性对Go语言情有独钟。文章首先概述了Go语言的优势,包括快速上手、并发编程简单、设计简洁且功能强大,以及丰富的标准库。接着,文章通过示例展示了如何编写和运行Go代码,包括声明包、导入包和输出语句。此外,还介绍了Go的语法基础,如变量类型(数字、字符串、布尔和复数)、变量赋值、类型转换和默认值。文章还涉及条件分支(if和switch)和循环结构(for)。最后,简要提到了Go函数的定义和多返回值特性,以及一些常见的Go命令。作者计划在后续文章中进一步探讨Go语言的其他方面。
13 0
|
19小时前
|
JavaScript 前端开发 Go
Go语言的入门学习
【4月更文挑战第7天】Go语言,通常称为Golang,是由Google设计并开发的一种编程语言,它于2009年公开发布。Go的设计团队主要包括Robert Griesemer、Rob Pike和Ken Thompson,这三位都是计算机科学和软件工程领域的杰出人物。
15 1

热门文章

最新文章