【Go】從0開始學習Go

文章目錄

  • 從0開始學習Go
    • 0 與C++對比
    • 1 代碼框架
      • 1.1 helloworld式代碼示例
      • 1.2 主體代碼元素(核心三部分)
      • 1.3 其他
    • 2 與C/C++區別
    • 3 有用的小工具
    • 4 注意事項

從0開始學習Go

0 與C++對比

特性C++Go
編譯型語言需要編譯為機器碼直接編譯為二進制可執行文件
靜態類型類型在編譯時確定類型系統更嚴格,支持類型推斷
指針操作支持指針(包括多級指針)支持指針(但無指針運算)
控制結構if/else for switch 相同語法更簡潔(省略括號)
函數多返回值需通過引用參數或結構體返回原生支持多返回值
領域C++ 特性Go 特性
內存管理手動管理(new/delete)自動垃圾回收(GC)
并發模型基于線程(std::thread)和鎖原生協程(goroutine)和通道(channel)
面向對象類繼承、多態、運算符重載通過接口(interface)和組合實現多態
錯誤處理異常機制(try/catch)顯式錯誤返回(多返回值模式)
包管理頭文件包含(#include)模塊化設計(go.mod 依賴管理)
泛型模板(template)1.18+ 支持泛型(語法更簡單)
編譯速度較慢(尤其大型項目)極快(依賴分析高效)

1 代碼框架

1.1 helloworld式代碼示例

package mainimport "fmt"func main() {fmt.Println("Hello, world!")
}

1.2 主體代碼元素(核心三部分)

  • package
    • 包,表示一組代碼。每個go文件都以package開頭
  • import
    • 導入其他包
  • func
    • 即function,由一行或多行代碼組成的組,可被其他程序調用。
    • go程序運行時會尋找main,并首先運行

1.3 其他

  1. 并發編程

    • 關鍵模式轉換:
      // 傳統線程 → Go協程
      go func() {  // 啟動一個協程// 并發任務
      }()// 共享內存 → 通道通信
      ch := make(chan int)
      go func() { ch <- 42 }()
      value := <-ch
      
  2. 接口與組合

    • 面向對象思維轉換:
      type Writer interface {Write([]byte) (int, error)
      }type FileWriter struct { /* 字段 */ }
      func (fw FileWriter) Write(data []byte) (int, error) {// 實現接口
      }
      

2 與C/C++區別

  1. 不以分號結尾,但可以用來分隔語句(不推薦)

3 有用的小工具

  1. go fmt
    go自帶格式化工具,不需要像c++一樣借助clang等工具

  2. go test
    go test -bench . # 基準測試

  3. go tool
    go tool pprof # 性能剖析

  4. 依賴管理

    • 創建模塊:
      go mod init your-project
      go get github.com/gin-gonic/gin@v1.7.7
      

4 注意事項

  • 需避免的常見陷阱
    1. 過度設計

      • ? 用 C++ 的類層次結構設計 Go 程序
      • ? 使用小而精的接口 + 組合
    2. 并發誤用

      • ? 直接共享內存(sync.Mutex 不是首選方案)
      • ? 優先使用通道通信
    3. 錯誤處理

      • ? 忽略錯誤返回值
      • ? 始終檢查錯誤:
        if result, err := someFunc(); err != nil {// 處理錯誤
        }
        

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/80570.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/80570.shtml
英文地址,請注明出處:http://en.pswp.cn/web/80570.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

簡單說一下 Webpack分包

最近在看有關webpack分包的知識&#xff0c;搜索了很多資料&#xff0c;感覺這一塊很是迷惑&#xff0c;網上的資料講的也迷迷糊糊&#xff0c;這里簡單總結分享一下&#xff0c;也當個筆記。 如有錯誤請指出。 為什么需要分包 我們知道&#xff0c;webpack的作用&#xff0c…

使用Python和FastAPI構建網站爬蟲:Oncolo醫療文章抓取實戰

使用Python和FastAPI構建網站爬蟲&#xff1a;Oncolo醫療文章抓取實戰 前言項目概述技術棧代碼分析1. 導入必要的庫2. 初始化FastAPI應用3. 定義請求模型4. 核心爬蟲功能4.1 URL驗證和準備4.2 設置HTTP請求4.3 發送請求和解析HTML4.4 提取文章內容4.5 保存結果和返回數據 5. AP…

YoloV8改進策略:卷積篇|風車卷積|即插即用

文章目錄 論文信息論文翻譯摘要引言相關研究紅外搜索與跟蹤檢測和分割網絡紅外搜索與跟蹤數據集的損失函數紅外搜索與跟蹤數據集方法風車形卷積(PConv)基于尺度的動態損失SIRST - UAVB數據集實驗實驗設置與其他方法的比較多模型上的消融實驗結論致謝代碼改進方法測試結果總結…

【NLP】36. 從指令微調到人類偏好:構建更有用的大語言模型

從指令微調到人類偏好&#xff1a;構建更有用的大語言模型 大語言模型&#xff08;LLMs&#xff09;已經成為現代自然語言處理系統的核心&#xff0c;但單純依賴傳統語言建模目標&#xff0c;往往難以滿足實際應用的“人類意圖”。從 Instruction Tuning&#xff08;指令微調&…

基于Transformers與深度學習的微博評論情感分析及AI自動回復系統

前言 這個項目存在cookie沒有自動更新問題&#xff0c;后續可能會發出來解決教程&#xff0c;還有微博網頁版的話最多看到300條評論&#xff0c;而且回復別人信息的話最多回復15條就要休息5分鐘左右才能評論 1. 項目概述 本項目實現了一個微博評論自動化處理系統&#xff0c…

詳解 Zephyr RTOS:架構、功能與開發指南

目錄 Zephyr RTOS 的核心特性 1. 輕量級和可擴展性 2. 實時性能 3. 多平臺支持 4. 安全性 5. 社區和生態系統 Zephyr 的架構 1. 內核 2. 驅動模型 3. 網絡棧 4. 文件系統 開發環境和工具鏈 安裝和配置 開發流程 1. 應用程序開發 2. 調試和測試 3. 部署 實際應…

人工智能重塑醫療健康:從輔助診斷到個性化治療的全方位變革

人工智能正在以前所未有的速度改變著醫療健康領域&#xff0c;從影像診斷到藥物研發&#xff0c;從醫院管理到遠程醫療&#xff0c;AI 技術已滲透到醫療服務的各個環節。本文將深入探討人工智能如何賦能醫療健康產業&#xff0c;分析其在醫學影像、臨床決策、藥物研發、個性化醫…

Linux筆記---內核態與用戶態

用戶態&#xff08;User Mode&#xff09; 權限級別&#xff1a;較低&#xff0c;限制應用程序直接訪問硬件或關鍵系統資源。 適用場景&#xff1a;普通應用程序的運行環境。 限制&#xff1a;無法執行特權指令&#xff08;如操作I/O端口、修改內存管理單元配置等&#xff09…

Spring 代理與 Redis 分布式鎖沖突:一次鎖釋放異常的分析與解決

Spring 代理與 Redis 分布式鎖沖突&#xff1a;一次鎖釋放異常的分析與解決 Spring 代理與 Redis 分布式鎖沖突&#xff1a;一次鎖釋放異常的分析與解決1. 問題現象與初步分析2 . 原因探究&#xff1a;代理機制對分布式鎖生命周期的干擾3. 問題復現偽代碼4. 解決方案&#xff1…

SQL:多列匹配(Multiple-column Matching)

目錄 基礎概念 應用場景詳解 1. 多列等值匹配 2. 多列 IN 匹配&#xff08;集合匹配&#xff09; 3. 多列 JOIN 匹配&#xff08;復合鍵連接&#xff09; 4. 多列匹配 子查詢 5. 多列匹配 EXISTS 6. 多列匹配 UNION&#xff08;組合數據源&#xff09; 7. 多列匹配…

基于DeepSeek的智能客服系統實踐與創新

引言:AI大模型重塑客戶服務新范式 近年來,AI大模型技術的突破性進展正在深刻改變傳統客戶服務模式。作為國內領先的AI企業,DeepSeek憑借其創新的算法架構(如MoE混合專家模型、動態學習率調度器)和極致的成本效益(僅為同類模型成本的1/20),在自然語言理解、情感分析、多…

SGLang和vllm比有什么優勢?

環境&#xff1a; SGLang vllm 問題描述&#xff1a; SGLang和vllm比有什么優勢&#xff1f; 解決方案&#xff1a; SGLang和vLLM都是在大語言模型&#xff08;LLM&#xff09;推理和部署領域的開源項目或框架&#xff0c;它們各自有不同的設計目標和優勢。下面我綜合目前…

三、Hive DDL數據庫操作

在 Apache Hive 中&#xff0c;數據庫 (Database)&#xff0c;有時也被稱為模式 (Schema)&#xff0c;是組織和管理 表及其他對象的基本命名空間單元。熟練掌握數據庫層面的數據定義語言 (DDL) 操作&#xff0c;是構建清晰、有序的 Hive 數據倉庫的第一步。本篇筆記將詳細梳理 …

Redis(2):Redis + Lua為什么可以實現原子性

Redis 作為一款高性能的鍵值對存儲數據庫&#xff0c;與 Lua 腳本相結合&#xff0c;為實現原子性操作提供了強大的解決方案&#xff0c;本文將深入探討 Redis Lua 實現原子性的相關知識 原子性概念的厘清 在探討 Redis Lua 的原子性之前&#xff0c;我們需要明確原子性的概念…

科普:極簡的AI亂戰江湖

本文無圖。 大模型 ?2022年2月&#xff0c;?文生圖應用的鼻祖Midjourney上線。 ?2022年8月&#xff0c;?開源版的Midjourney&#xff0c;也就是Stable Diffusion上線。 2022年11月30日?&#xff0c;OpenAI正式發布ChatGPT-3.5。 此后&#xff0c;不斷有【大模型】面世&…

CSS- 4.5 css + div 布局 簡易網易云音樂 官網布置實例

本系列可作為前端學習系列的筆記&#xff0c;代碼的運行環境是在HBuilder中&#xff0c;小編會將代碼復制下來&#xff0c;大家復制下來就可以練習了&#xff0c;方便大家學習。 HTML系列文章 已經收錄在前端專欄&#xff0c;有需要的寶寶們可以點擊前端專欄查看&#xff01; 點…

【滑動窗口】LeetCode 1004題解 | 最大連續1的個數 Ⅲ

最大連續1的個數 Ⅲ 一、題目鏈接二、題目三、題目解析四、算法原理解法一&#xff1a;暴力枚舉 zero計數器解法二&#xff1a;滑動窗口 五、編寫代碼六、時空復雜度 一、題目鏈接 最大連續1的個數 Ⅲ 二、題目 三、題目解析 注意題目中說的是最多k次&#xff0c;在一個數組…

PyTorch音頻處理技術及應用研究:從特征提取到相似度分析

文章目錄 音頻處理技術及應用音頻處理技術音視頻摘要技術音頻識別及應用 梅爾頻率倒譜系數音頻特征爾頻率倒譜系數簡介及參數提取過程音頻處理快速傅里葉變換(FFT)能量譜處理離散余弦轉換 練習案例&#xff1a;音頻建模加載音頻數據源波形變換的類型繪制波形頻譜圖波形Mu-Law 編…

鴻蒙OSUniApp 實現的語音輸入與語音識別功能#三方框架 #Uniapp

UniApp 實現的語音輸入與語音識別功能 最近在開發跨平臺應用時&#xff0c;客戶要求添加語音輸入功能以提升用戶體驗。經過一番調研和實踐&#xff0c;我成功在UniApp項目中實現了語音輸入與識別功能&#xff0c;現將過程和方法分享出來&#xff0c;希望對有類似需求的開發者有…

2025年衛星遙感行業最新發展趨勢深度分析

一、國內發展趨勢&#xff1a;政策引領與技術突破雙輪驅動 &#xff08;一&#xff09;政策體系持續完善&#xff0c;頂層設計深化行業發展 國家級戰略與標準體系構建 中國政府將衛星遙感產業納入“十四五”規劃核心戰略&#xff0c;明確構建“通導遙”一體化空間基礎設施。20…