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.pswp.cn/news/207698.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/207698.shtml
英文地址,請注明出處:http://en.pswp.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…