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

我们正在加速进入云原生时代,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语言中有函数和方法,他俩的区别是:如果声明的函数带有接受者,则是方法。
方法的接受者分为:指针接受者、值接受者。使用指针接受者的方法,只能使用指针类型调用。使用值接受者的方法,使用指针类型和值类型都可以调用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/207698.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringAOP专栏二《原理篇》

上一篇SpringAOP专栏一《使用教程篇》-CSDN博客介绍了SpringAop如何使用,这一篇文章就会介绍Spring AOP 的底层实现原理,并通过源代码解析来详细阐述其实现过程。 前言 Spring AOP 的实现原理是基于动态代理和字节码操作的。不了解动态代理和字节码操作…

【C语言】函数递归详解(一)

目录 1.什么是递归: 1.1递归的思想: 1.2递归的限制条件: 2.递归举例: 2.1举例1:求n的阶乘: 2.1.1 分析和代码实现: 2.1.2图示递归过程: 2.2举例2:顺序打印一个整数的…

机器学习---集成学习的初步理解

1. 集成学习 集成学习(ensemble learning)是现在非常火爆的机器学习方法。它本身不是一个单独的机器学 习算法,而是通过构建并结合多个机器学习器来完成学习任务。也就是我们常说的“博采众长”。集 成学习可以用于分类问题集成,回归问题集成&#xff…

多线程并发Ping脚本

1. 前言 最近需要ping地址,还是挺多的,就使用python搞一个ping脚本,记录一下,以免丢失了。 2. 脚本介绍 首先检查是否存在True.txt或False.txt文件,并在用户确认后进行删除,然后从IP.txt的文件中读取IP地…

CSS——sticky定位

1. 大白话解释sticky定位 粘性定位通俗来说,它就是相对定位relative和固定定位fixed的结合体,它的触发过程分为三个阶段 在最近可滚动容器没有触发滑动之前,sticky盒子的表现为相对定位relative【第一阶段】, 但当最近可滚动容…

【MATLAB】tvfEMD信号分解+FFT+HHT组合算法

有意向获取代码,请转文末观看代码获取方式~也可转原文链接获取~ 1 基本定义 TVFEMDFFTHHT组合算法是一种结合了总体变分模态分解(TVFEMD)、傅里叶变换(FFT)和希尔伯特-黄变换(HHT)的信号分解方…

vivado时序方法检查8

TIMING-30 &#xff1a; 生成时钟所选主源管脚欠佳 生成时钟 <clock_name> 所选的主源管脚欠佳 &#xff0c; 时序可能处于消极状态。 描述 虽然 create_generated_clock 命令允许您指定任意参考时钟 &#xff0c; 但是生成时钟应引用在其直接扇入中传输的时钟。此…

电子学会C/C++编程等级考试2021年06月(五级)真题解析

C/C++等级考试(1~8级)全部真题・点这里 第1题:数字变换 给定一个包含5个数字(0-9)的字符串,例如 “02943”,请将“12345”变换到它。 你可以采取3种操作进行变换 1. 交换相邻的两个数字 2. 将一个数字加1。如果加1后大于9,则变为0 3. 将一个数字加倍。如果加倍后大于…

JS--异步的日常用法

目录 JS 异步编程并发&#xff08;concurrency&#xff09;和并行&#xff08;parallelism&#xff09;区别回调函数&#xff08;Callback&#xff09;GeneratorPromiseasync 及 await常用定时器函数 JS 异步编程 并发&#xff08;concurrency&#xff09;和并行&#xff08;p…

Python中一些有趣的例题

下面会写一些基础的例题&#xff0c;有兴趣的自己也可以练练手&#xff01; 1.假设手机短信收到的数字验证码为“278902”&#xff0c;编写一个程序&#xff0c;让用户输入数字验证码&#xff0c;如果数字验证码输入正确&#xff0c;提示“支付成功”&#xff1b;否则提示“数…

Python configparser 模块:优雅处理配置文件的得力工具

更多资料获取 &#x1f4da; 个人网站&#xff1a;ipengtao.com 配置文件在软件开发中扮演着重要的角色&#xff0c;而Python中的 configparser 模块提供了一种优雅而灵活的方式来处理各种配置需求。本文将深入介绍 configparser 模块的各个方面&#xff0c;通过丰富的示例代码…

嵌入式杂记 - MDK的Code, RO-data , RW-data, ZI-data意思

嵌入式杂记 - Keil的Code, RO-data , RW-data, ZI-data意思 MDK中的数据分类MCU中的内部存储分布MDK中数据类型存储Code代码段例子 RO-data 只读数据段例子 RW-data 可读写数据段例子 ZI-data 清零数据段例子 在嵌入式开发中&#xff0c;我们经常都会使用一些IDE&#xff0c;例…

Hadoop学习笔记(HDP)-Part.17 安装Spark2

目录 Part.01 关于HDP Part.02 核心组件原理 Part.03 资源规划 Part.04 基础环境配置 Part.05 Yum源配置 Part.06 安装OracleJDK Part.07 安装MySQL Part.08 部署Ambari集群 Part.09 安装OpenLDAP Part.10 创建集群 Part.11 安装Kerberos Part.12 安装HDFS Part.13 安装Ranger …

Web前端 ---- 【Vue】Vuex的使用(辅助函数、模块化开发)

目录 前言 Vuex是什么 Vuex的配置 安装vuex 配置vuex文件 Vuex核心对象 actions mutations getters state Vuex在vue中的使用 辅助函数 Vuex模块化开发 前言 本文介绍一种新的用于组件传值的插件 —— vuex Vuex是什么 Vuex 是一个专为 Vue.js 应用程序开发的状态…

浅谈前端代码里的命名规范与注释

浅谈前端代码里的命名规范与注释 在前端代码中&#xff0c;命名规范和注释是非常重要的。它们不仅有助于提高代码的可读性和可维护性&#xff0c;还可以帮助开发者之间更好地协作和沟通。下面是一些关于命名规范和注释的常见建议&#xff1a; 命名规范&#xff1a; 使用有意义…

【ArcGIS Pro微课1000例】0053:基于SQL Server创建与启用地理数据库

之前的文章有讲述基于SQL Server创建企业级地理数据库,本文讲述在SQL Server中创建常规的关心数据库,然后在ArcGIS Pro中将其启用,转换为企业级地理数据库。 1. 在SQL Server中创建数据库** 打开SQL Server 2019,连接到数据库服务器。 展开数据库连接,在数据库上右键→新…

python中的lambda关键字

对于一切很模糊的知识&#xff0c;首要的是抓住概念的定义。 lambda&#xff1a;在 Python 中用于创建匿名函数的关键字。 也即&#xff0c;lambda是一种关键字&#xff0c;这种关键字的作用是创建匿名函数。 这一段很好懂&#xff0c;就是匿名函数有点懵。 什么是匿名函数&…

mybatis-plus构造器查询

文章目录 Hutool工具包Vo与entity转换多表分页查询构造器&#xff1a;查询构造器&#xff1a;拼接构造器&#xff1a;删除操作构造器&#xff1a;修改操作查询关键字 Hutool工具包Vo与entity转换 BeanUtils&#xff1a;copyProperties(vo, entity)&#xff0c;vo转实体类。 L…

在装有 PostgreSQL 14 的 Red Hat8上安装 `pg_cron`

要在装有 PostgreSQL 14 的 Red Hat、CentOS、Fedora 或 Amazon Linux 上安装 pg_cron&#xff0c;请遵循以下步骤。这些步骤假定您已经安装了 PostgreSQL Global Development Group (PGDG) 的 PostgreSQL 版本。 安装 pg_cron 扩展 使用 yum 安装 pg_cron 扩展&#xff1a;s…

(四)Tiki-taka算法(TTA)求解无人机三维路径规划研究(MATLAB)

一、无人机模型简介&#xff1a; 单个无人机三维路径规划问题及其建模_IT猿手的博客-CSDN博客 参考文献&#xff1a; [1]胡观凯,钟建华,李永正,黎万洪.基于IPSO-GA算法的无人机三维路径规划[J].现代电子技术,2023,46(07):115-120 二、Tiki-taka算法&#xff08;TTA&#xf…