Go 语言学习指南:变量、循环、函数、数据类型、Web 框架等全面解析
學習基礎知識
掌握 Go 語言的常見概念,如變量、循環、條件語句、函數、數據類型等等。深入了解 Go 基礎知識的好起點是查閱 Go 官方文檔
文章鏈接:Go 編程語言詳解:用途、特性、與 Python 和 C++ 的比較
基本語法
了解 Go 語言的基本語法,包括 Go 程序的執行方式、包引入、主函數等
Go 中的變量
變量是賦予內存位置的名稱,用于存儲特定類型的值。Go 語言提供了多種聲明和使用變量的方式。
文章鏈接:Go 語言變量類型和聲明詳解
數據類型
Go 是一種靜態類型的編程語言,這意味著每個變量在初始時都有一個定義的類型,并且只能保存該類型的值。在 Go 中,有兩類數據類型:基本類型和復合類型。
文章鏈接:解析 Go 編程語言數據類型:bool、整數、浮點數和字符串詳細介紹
For Loop
Go 語言只有一種循環結構,即 for 循環?;镜?for 循環由三個部分組成,用分號分隔:
- 初始化語句:在第一次迭代之前執行
- 條件表達式:在每次迭代之前評估
- 后置語句:在每次迭代結束時執行
文章鏈接:Go 語言中 For 循環:語法、使用方法和實例教程
Range
Range 與 For 循環一起用于在數組、字符串和其他數據結構中迭代每個元素。
條件語句
條件語句用于僅在某個條件為真時執行代碼;Go 支持:
-
if語句 -
if / else語句 -
switch case語句
文章鏈接:深入了解 Golang 條件語句:if、else、else if 和嵌套 if 的實用示例
Errors/Panic/Recover
為了替代添加異常處理程序,Go 的創建者利用了 Go 能夠返回多個值的能力。發出錯誤的 Go 語言中最常用的技術是將錯誤作為返回的最后一個值。
Panic 通常意味著發生了意外錯誤。主要用于在不應該在正常操作期間發生的錯誤或我們無法優雅處理的錯誤時快速失敗。
Go 中的 Panic 恢復取決于一種語言特性,稱為延遲函數。Go 具有在其父函數返回時保證函數執行的能力。這會發生無論父函數返回的原因是 return 語句、函數塊的結束還是 panic。
Functions
了解 Go 中函數的工作原理,下面的資源列表將涵蓋:
- 如何在 Go 中定義和調用函數?
- Go 中的命名返回值?
- 處理多個返回類型。
- Go 中不同類型的函數。
文章鏈接:Go 語言函數、參數和返回值詳解
Packages
包是 Go 語言中最強大的部分。包的目的是通過將相關功能組合到單個單元中,從而設計和維護大量程序,以便它們易于維護和理解,并且獨立于其他包程序。這種模塊化允許它們進行共享和重用。在 Go 語言中,每個包都用不同的名稱定義,并且該名稱與其功能密切相關,如“strings”包,它包含與字符串相關的方法和函數。
文章鏈接:Go 語言基礎:包、函數、語句和注釋解析
Type Casting
Go 不支持自動類型轉換,但允許類型轉換,即顯式更改變量類型。要了解更多關于類型轉換的信息,請訪問以下資源:
Type Inference
類型推斷使 Go 能夠檢測值的類型,而無需明確指定類型,因此可以在首次聲明變量時聲明變量而不提供其類型的可能性。
Arrays
在 Go 中,數組是在創建數組時定義的具有相同類型的元素集合。
文章鏈接:Go 語言數組基礎教程 - 數組的聲明、初始化和使用方法
Slices
切片類似于數組,但更強大和靈活。像數組一樣,切片也用于在單個變量中存儲相同類型的多個值。但與數組不同,切片的長度可以根據需要增長和縮小。
文章鏈接:Go 語言中切片的使用和理解
Maps
映射是 Go 中的數據結構,我們在想要在鍵值對之間進行映射時使用它。它們在刪除或添加元素方面具有靈活性。映射不允許重復條目,同時數據是無序的。
文章鏈接:Go 語言之 Maps 詳解:創建、遍歷、操作和注意事項
Make
Golang 的內置函數 make 幫助我們創建和初始化切片、映射和通道,具體取決于傳遞給函數的參數。
Structs
結構是用戶定義的類型,幫助我們創建描述單個實體的數據集合
文章鏈接:Go 語言中結構體的使用和示例
Modules
Go 模塊是一組相關的包,它們被一起進行版本控制和分發。它們指定了我們項目的要求,列出了所有所需的依賴項,并幫助我們跟蹤安裝的依賴項的具體版本。
Working with JSON
JSON(JavaScript 對象表示法)是一種簡單的數據交換格式。在語法上,它類似于 JavaScript 的對象和列表。它最常用于 Web 后端與在瀏覽器中運行的 JavaScript 程序之間的通信,但它在許多其他地方也被使用。
Types and Type Assertions
Golang 中的類型斷言提供了對接口變量的確切類型的訪問。
Interfaces
Go 中的接口是一種定義一組方法的類型。如果我們有一個實現該方法集的類型(例如結構體),那么我們就有了實現該接口的類型。
Context
context 包提供了解決請求期間管理狀態問題的標準方式。該包滿足對請求范圍數據的需求,并提供了處理截止日期、取消信號等的標準化方式。
Goroutines
Goroutines 允許我們在 Go 中編寫并發程序。處理成千上萬個請求的 Web 服務器或在同時進行網絡請求的同時呈現新頁面的網站都是并發的示例。在 Go 中,每個并發任務都稱為 Goroutines
具和協議。它們幫助您在開發Web應用程序時繞過一些操作,而不是每次都重新發明*。使用API客戶端是加快開發過程的好方法
REST
REST(表述性狀態轉移)API(應用程序編程接口)
Channels
通道是連接并發Goroutines的管道。您可以從一個Goroutine向通道發送值,然后從另一個Goroutine接收這些值。通道是一種通過通道操作符<-發送和接收值的有類型導管。
Buffer
緩沖區屬于Go語言的字節包,我們可以使用這些包來操作字符串的字節。
Select
select 語句讓一個Goroutine等待多個通信操作。select 語句阻塞,直到其一個case可以運行,然后執行該case。如果有多個case準備就緒,則它會隨機選擇一個。select 語句類似于switch語句,但在select語句中,case語句涉及通信,即在通道上發送或接收操作。
Mutex
Go允許我們使用Goroutines并發運行代碼。然而,當并發進程訪問相同的數據片段時,可能導致競態條件。Mutex 是sync包提供的數據結構。它們可以幫助我們在數據的不同部分放置鎖,以便一次只能有一個Goroutine訪問它。
Building CLI Applications
與圖形用戶界面(GUI)不同,命令行界面(CLI)僅限于文本。云和基礎架構應用程序主要基于CLI,因為它們易于自動化并具有遠程功能。Go應用程序構建為單一自包含二進制文件,使得安裝Go應用程序變得簡單;具體來說,用Go編寫的程序可以在任何系統上運行,而無需任何現有庫、運行時或依賴項。而且,使用Go編寫的程序具有即時啟動時間,類似于C或C++,但其他編程語言無法達到。
Cobra
Cobra 是用于創建強大的現代CLI應用程序的庫。
Urfave CLI
Urfave cli 是用于在Go中構建命令行應用程序的簡單、快速且有趣的包。
ORMs
對象關系映射(ORM)是計算機科學中一種使用面向對象編程語言在類型系統之間轉換數據的編程技術。實際上,這創建了一個“虛擬對象數據庫”,因此是一種抽象層,可以從編程語言內部使用。
Gorm
GORM 是針對Golang的出色ORM庫,旨在使開發人員友好。它是用于處理關系數據庫的ORM庫。此gorm庫是在database/sql包的基礎上開發的。ORM的概述和功能包括:全功能的ORM(幾乎)
Web框架
Go語言有幾個著名的Web框架,其中最常見的包括:
Beego
Beego 用于在Go中快速開發企業應用,包括RESTful API、Web應用和后端服務。它受到了Tornado、Sinatra和Flask的啟發。beego 具有一些Go特定的功能,如接口和結構嵌套。
Gin
Gin 是一個用Go編寫的高性能HTTP Web框架。Gin 具有類似Martini的API,并聲稱速度最高可達40倍。Gin 允許您在Go中構建Web應用程序和微服務。
Web Frameworks
Revel
Revel 將端點組織到控制器中。它提供簡單的數據綁定和表單驗證。Revel 使得在規模上使用Go模板變得簡單??梢栽诓僮髦盎蛑笞怨δ?。
Echo
Echo 是一個專注于性能的、可擴展的、開源的Go Web應用框架。它是一個介于stdlib +路由器和全棧Web框架之間的極簡主義Web框架。
Gorilla
Gorilla 是用于Go編程語言的Web工具包,提供有用的、可組合的包,用于編寫基于HTTP的應用程序。
Go Fiber
Go Fiber 是受Express啟發的Golang框架。Go Fiber 是建立在快速HTTP之上的Web框架。它可以用于處理路由/端點、中間件、服務器請求等操作。
Buffalo
Buffalo 幫助您生成一個Web項目,該項目已經連接并準備好運行,從前端(JavaScript、SCSS等)到后端(數據庫、路由等)都已經連接。從那里,它提供了一種在Go中快速構建Web應用程序的簡單API。
Logging
Go具有內置功能,使程序員更容易實現日志記錄。第三方也構建了額外的工具,以使日志記錄更加容易。
Apex
用于Go的結構化日志記錄包。
Zerolog
zerolog 包提供了一個專注于JSON輸出的快速且簡單的記錄器。Zerolog 的API旨在既提供出色的開發人員體驗,又具有驚人的性能。其獨特的鏈接API允許zerolog 通過避免分配和反射來寫入JSON(或CBOR)日志事件。
Zap
在Go中進行快速、結構化、級別日志記錄。
Real-time Communication
Melody
Melody 是基于github.com/gorilla/websocket的websocket框架,它抽象出了處理websocket
的繁瑣部分,讓您可以編寫實時應用程序。
Centrifugo
Centrifugo 是一個開源的可擴展實時消息服務器。Centrifugo 可以立即將消息傳遞給通過支持的傳輸連接的應用程序在線用戶(WebSocket、HTTP流、SSE/EventSource、GRPC、SockJS、WebTransport)。Centrifugo 有通道的概念,因此它是一個面向用戶的發布/訂閱服務器。
API Clients
API客戶端是一組從計算機上的應用程序操作的工)用于處理網站時傳遞用戶功能。使用HTTP請求與REST API進行通信,以便用戶可以導航到URL網站。這些URL可以返回存儲為API的一部分的特定信息。
Heimdall
Heimdall 是一個HTTP客戶端,可以幫助您的應用程序大規模進行請求。使用Heimdall,您可以:
- 使用類似Hystrix的斷路器來控制失敗的請求
- 為每個請求添加同步內存重試,可選擇設置自己的重試策略
- 為每個請求創建具有不同超時的客戶端
- 所有HTTP方法都以流暢的接口形式公開。
Grequests
Grequests 是Python Grequests庫的Golang實現。功能包括:
- 響應可以序列化為JSON和XML
- 輕松上傳文件
- 輕松下載文件
- 支持以下HTTP動詞GET、HEAD、POST、PUT、DELETE、PATCH、OPTIONS
GraphQL
GraphQL 是用于API的查詢語言,它提供了一個服務,優先考慮僅提供客戶端請求的數據而不是更多數據。此外,您無需擔心破壞更改、版本控制和向后兼容性等問題,就像REST API一樣。因此,您可以通過使用GraphQL來實現您的版本并自動記錄API。
GraphQL Go
Go的GraphQL包
GraphQL
Gqlgen
根據它們的文檔,這是一個在不費力氣的情況下構建GraphQL服務器的Golang庫。
Testing Go Code
Go具有內置的測試命令,我們可以使用它來測試我們的程序。
Microservices
微服務是一種軟件開發的架構方法,它允許從可部署服務中創建分布式應用程序,這些服務通過明確定義的API進行通信。它是對單體的解決方案。
Watermill
Watermill 是用于處理Go中的異步請求的事件流庫。它提供多組實現用于發布/訂閱。例如:您可以使用傳統的發布/訂閱實現,如Kafka或RabbitMQ,也可以使用HTTP或MySQL binlog,如果適合您的用例。
Rpcx
Rpcx 是類似于阿里巴巴Dubbo和微博Motan的RPC(遠程過程調用)框架。使用Rpcx 的一些優勢:
- 簡單:易于學習、易于開發、易于集成和易于部署
- 性能:高性能(>= grpc-go)
- 跨平臺:支持原始字節切片、JSON、Protobuf和MessagePack。理論上它可以與java、php、python、c/c++、node.js、c#和其他平臺一起使用
- 服務發現和服務治理:支持zookeeper、etcd和consul。
Go kit
Go kit 是用于在Go中構建微服務(或優雅的單體)的編程工具包。它解決了分布式系統和應用架構中的常見問題,因此您可以專注于提供業務價值。
Micro
這是一個以API為先的開發平臺。它利用微服務架構模式,并提供了一組服務,它們充當平臺的構建塊。
go-zero
go-zero 是一個內置了許多工程最佳實踐的Web和RPC框架。它誕生于保證繁忙服務的穩定性,并且多年來一直為擁有數千萬用戶的站點提供服務。
Protocol Buffers
協議緩沖區(Protobuf)是一種免費、開源、語言中立、平臺中立、可擴展的數據格式,用于序列化結構化數據。它類似于JSON,但更小、更快,并生成本地語言綁定。
使用協議緩沖區的一些優勢包括:
- 緊湊的數據存儲
- 快速解析
- 在許多編程語言中可用
- 通過自動生成的類進行優化功能
gRPC Go
gRPC(gRPC Remote Procedure Call)的Go語言實現。
Grpc gateway
gRPC-Gateway 在gRPC服務之上創建了一層,它將充當客戶端的RESTful服務。它是protoc的插件。它讀取gRPC服務定義,并生成一個將RESTful JSON API轉換為gRPC的反向代理服務器。
Twirp
Twirp 是強調簡單和極簡的服務之間通信的框架。它從API定義文件生成路由和序列化,讓您專注于應用程序的邏輯,而不是考慮HTTP方法和路徑以及JSON之類的瑣事。
最后
為了方便其他設備和平臺的小伙伴觀看往期文章:
微信公眾號搜索:Let us Coding,關注后即可獲取最新文章推送
看完如果覺得有幫助,歡迎 點贊、收藏、關注
總結
以上是生活随笔為你收集整理的Go 语言学习指南:变量、循环、函数、数据类型、Web 框架等全面解析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 消费级物联网卡是什么卡
- 下一篇: keystone和beaengine的编