Go,從命名開始!Go的關鍵字和標識符全列表手冊和代碼示例!

来源:https://www.cnblogs.com/xfuture/archive/2023/09/06/17681931.html
-Advertisement-
Play Games

> 關註TechLeadCloud,分享互聯網架構、雲服務技術的全維度知識。作者擁有10+年互聯網服務架構、AI產品研發經驗、團隊管理經驗,同濟本復旦碩,復旦機器人智能實驗室成員,阿裡雲認證的資深架構師,項目管理專業人士,上億營收AI產品研發負責人。 ![file](https://img2023. ...


關註TechLeadCloud,分享互聯網架構、雲服務技術的全維度知識。作者擁有10+年互聯網服務架構、AI產品研發經驗、團隊管理經驗,同濟本復旦碩,復旦機器人智能實驗室成員,阿裡雲認證的資深架構師,項目管理專業人士,上億營收AI產品研發負責人。

file

一、Go的關鍵字列表和分類

介紹

關鍵字(Keywords)是編程語言中預定義的一組特殊辭彙,每個關鍵字都有一個明確的功能和用途。在Go編程語言中,關鍵字起著構建程式邏輯框架的作用,是程式語義和結構的基礎。本篇文章旨在深入探究關鍵字在Go中的定位與應用,以理解其在程式設計中的重要性。Go語言有25個預定義的關鍵字,這些關鍵字用於各種特定目的,從聲明變數和函數,到流程式控制制和併發編程。

break, default, func, interface, select,
case, defer, go, map, struct,
chan, else, goto, package, switch,
const, fallthrough, if, range, type,
continue, for, import, return, var

關鍵字在Go中的定位

語言的基石

關鍵字在任何編程語言中都是基礎構成元素,Go語言也不例外。它們是用於描述程式邏輯、定義數據結構、和處理錯誤等多方面任務的工具。

簡潔與高效

Go語言以其簡潔性和高效性而受到廣泛歡迎,這在很大程度上得益於其有限但高度優化的一組關鍵字。Go僅有25個關鍵字,相較於其他編程語言,這個數字相對較小,但每一個關鍵字都有明確和重要的用途。

可擴展性和靈活性

雖然關鍵字本身是固定的,但Go提供了一系列複合語句和操作符,以實現高度的可擴展性和靈活性。例如,你可以使用 if-else,for 和 switch 關鍵字創建複雜的邏輯結構。

關鍵字分類

聲明各種代碼元素

關鍵字 描述
const 用於聲明一個或多個常量
func 用於定義新的函數
import 用於導入外部包
package 用於聲明包名,通常位於每個Go源文件的第一行
type 用於聲明自定義類型,如結構體、介面、別名等
var 用於聲明一個或多個變數

組合類型的字面表示

關鍵字 描述
chan 用於聲明一個新的通道(channel)
interface 用於定義一個新的介面
map 用於聲明一個新的映射(鍵-值存儲)
struct 用於定義一個新的結構體

基本流程式控制制語法

關鍵字 描述
break 用於中斷當前迴圈或 switch 語句
case switch 語句中的一個分支
continue 跳過當前迴圈迭代的剩餘語句,進入下一次迭代
default switch 語句中的預設分支
else if 語句的否定分支
fallthrough 用於 switch 語句中,使控制流繼續執行下一個 case
for 用於迴圈
goto 跳轉到標簽(不推薦使用)
if 條件語句
range 用於 for 迴圈,遍曆數組、切片、映射或通道
return 用於從函數返回值
select 用於多路通道選擇
switch 用於多分支選擇語句

協程和延遲函數調用

關鍵字 描述
defer 用於延遲執行函數,通常用於清理資源
go 用於啟動一個新的 goroutine,實現併發

二、Go的關鍵字全代碼示例

關鍵字全代碼示例

關鍵字 代碼示例 代碼作用
const const PI = 3.14159 定義常量 PI
func func add(x, y int) int { return x + y } 定義名為 add 的函數
import import "fmt" 導入 fmt
package package main 定義包名為 main
type type Point struct {x, y int} 定義一個名為 Point 的結構體
var var name string = "John" 定義一個名為 name 的變數
chan ch := make(chan int) 創建一個新的整數類型的通道
interface type Writer interface { Write([]byte) error } 定義一個名為 Writer 的介面
map m := map[string]int{"one": 1} 創建一個鍵為字元串、值為整數的映射
struct type Circle struct { Radius float64 } 定義一個名為 Circle 的結構體
break if x > 0 { break } 如果 x > 0,則跳出迴圈
case case "apple": fmt.Println("It's an apple") switch 語句中,定義一個 case
continue if x < 0 { continue } 如果 x < 0,則跳過當前迴圈迭代
default default: fmt.Println("It's default") switch 語句中,定義一個預設 case
else if x > 0 { /*...*/ } else { /*...*/ } if 語句的否定分支
fallthrough case 1: fallthrough switch 語句中,強制執行下一個 case
for for i := 0; i < 10; i++ { /*...*/ } 迴圈10次
goto goto myLabel 跳轉到 myLabel 標簽(不推薦)
if if x > 0 { /*...*/ } 條件為 x > 0 時,執行某個操作
range for k, v := range m { /*...*/ } 遍歷映射 m
return return x + y 從函數中返回 x + y
select select { case <-ch: /*...*/} 多路通道選擇
switch switch x { case 1: /*...*/ } 多分支選擇
defer defer fmt.Println("bye") 延遲執行 fmt.Println("bye") 直到函數退出
go go doSomething() 在新的 goroutine 中執行 doSomething() 函數

三、Go的標識符定義

標識符是編程語言中用於識別各種編程元素(如變數、函數、類型等)的名字。在Go語言中,標識符有一組特定的規則和約定。下麵將詳細解析這些規則和特性。

基礎定義

一個標識符是一個以Unicode字母或者下劃線(_)開頭,並且完全由Unicode字母和Unicode數字組成的單詞。

  • Unicode字母:這些是定義在Unicode標準8.0中的Lu、Ll、Lt、Lm和Lo分類中的字元。
  • Unicode數字:這些是定義在Unicode標準8.0中的Nd數字字元分類中的字元。

特殊規定

關鍵字與標識符

Go的關鍵字不能被用作標識符。這是一個重要的限制,以避免命名衝突和語法混淆。

空標識符

標識符 _ 是一個特殊字元,它被稱為空標識符。它用於忽略函數的某個返回值或強制性聲明一個變數,但不使用。

作用域和可見性

  • 導出標識符:一個由Unicode大寫字母開頭的標識符稱為導出標識符,也可以被理解為公開(public)。
  • 非導出標識符:其它(即非Unicode大寫字母開頭的)標識符稱為非導出標識符,也可以被理解為私有(private)。

註意:截至目前(Go 1.20),東方字元都被視為非導出字元。

合法標識符示例

導出標識符

  • Player_9
  • DoSomething
  • VERSION
  • Ĝo
  • Π

非導出標識符

  • _
  • _status
  • memStat
  • book
  • π
  • 一個類型
  • 변수
  • エラー

非法標識符

  • 由Unicode數字開頭:123, 3apples
  • 含有不符合要求的Unicode字元:a.b, *ptr, $name, [email protected]
  • 使用關鍵字:type, range

四、Go的標識符舉例

在Go語言中,標識符用於命名各種類型的編程元素,如變數、常量、函數等。本文將通過表格的形式,提供不同類型標識符的代碼示例和相關解釋。

表格:Go標識符類型、示例與解釋

標識符類型 標識符示例 解釋
變數 myVariable 用於存儲數據值。
常量 MAX_COUNT 用於存儲不會改變的數據值。
函數 CalculateSum 包含執行特定任務的代碼塊。
結構體 Person 用於定義包含多個欄位(變數)的複合數據類型。
介面 Writer 定義了方法集,任何實現了這些方法的類型都被認為實現了該介面。
切片 mySlice 動態數組,可以在運行時更改大小。
Map colorMap 鍵值對的集合。
Channel msgChannel 用於在Goroutine之間發送和接收數據。
fmt 用於組織和復用代碼,通常包含函數、變數、常量等。
別名 type MyInt int 用於給現有類型創建一個新名字。
枚舉 enum Status 一組命名的整數常量。
Goroutine go doSomething() 併發執行的函數。
標簽 LOOP: 用於控制流語句,如breakcontinue
空標識符 _ 用於忽略不需要的值。
導出標識符 PublicVar 在其他包中可見和可用的標識符。
非導出標識符 privateVar 僅在定義它的包內可見和可用的標識符。

五、Go關鍵詞和標識符代碼實戰

在本部分中,我們將通過一個綜合性的代碼實戰案例來探討Go中所有關鍵詞和標識符的實際應用。我們將創建一個簡單的計算器程式,該程式將實現加、減、乘、除四種操作。

綜合案例:簡單計算器

package main // package關鍵詞用於定義包名

import "fmt" // import關鍵詞用於引入外部包

// 全局變數聲明
var result int // var關鍵詞用於聲明變數

const maxInput = 100 // const關鍵詞用於聲明常量

// 自定義類型聲明
type Calculator func(int, int) int // type關鍵詞用於聲明自定義類型

// 主函數
func main() { // func關鍵詞用於聲明函數
    var operator string // 局部變數聲明
    var num1, num2 int

    for { // for關鍵詞用於迴圈
        fmt.Println("請輸入操作符 (+, -, *, /, exit):")
        fmt.Scanln(&operator)

        if operator == "exit" { // if關鍵詞用於條件判斷
            fmt.Println("程式退出。")
            break // break關鍵詞用於跳出迴圈
        }

        fmt.Println("請輸入兩個整數:")
        fmt.Scanln(&num1, &num2)

        switch operator { // switch關鍵詞用於多條件判斷
        case "+":
            result = calculate(add, num1, num2)
        case "-":
            result = calculate(subtract, num1, num2)
        case "*":
            result = calculate(multiply, num1, num2)
        case "/":
            if num2 == 0 { // else關鍵詞用於條件判斷
                fmt.Println("除數不能為0")
                continue // continue關鍵詞用於跳過本次迴圈
            }
            result = calculate(divide, num1, num2)
        default: // default關鍵詞用於多條件預設選項
            fmt.Println("無效的操作符")
            continue
        }

        fmt.Printf("結果為: %d\n", result)
    }
}

// 函數聲明與定義
func calculate(calc Calculator, num1, num2 int) int { 
    return calc(num1, num2)
}

// 加法
func add(a, b int) int {
    return a + b
}

// 減法
func subtract(a, b int) int {
    return a - b
}

// 乘法
func multiply(a, b int) int {
    return a * b
}

// 除法
func divide(a, b int) int {
    return a / b
}

關鍵詞和標識符解析

  • package:定義了當前代碼所屬的包,這裡是main
  • import:用於引入外部庫,這裡我們引入了fmt庫。
  • var:全局和局部變數聲明。
  • const:用於定義常量,這裡定義了一個名為maxInput的常量。
  • type:用於聲明自定義類型,這裡定義了一個Calculator函數類型。
  • func:用於聲明函數,這裡聲明瞭多個函數。
  • for:用於迴圈,這裡是一個無限迴圈。
  • ifelse:用於條件判斷。
  • switchcasedefault:用於多條件判斷。
  • break:用於跳出迴圈。
  • continue:用於跳過當前迴圈迭代。

file

關註TechLeadCloud,分享互聯網架構、雲服務技術的全維度知識。作者擁有10+年互聯網服務架構、AI產品研發經驗、團隊管理經驗,同濟本復旦碩,復旦機器人智能實驗室成員,阿裡雲認證的資深架構師,項目管理專業人士,上億營收AI產品研發負責人。
如有幫助,請多關註
個人微信公眾號:【TechLeadCloud】分享AI與雲服務研發的全維度知識,談談我作為TechLead對技術的獨特洞察。
TeahLead KrisChang,10+年的互聯網和人工智慧從業經驗,10年+技術和業務團隊管理經驗,同濟軟體工程本科,復旦工程管理碩士,阿裡雲認證雲服務資深架構師,上億營收AI產品業務負責人。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 最近在公司項目上遇到程式運行時崩潰,也不好在log日誌中定位。查找了資料發現,谷歌的一個開源項目Breakpad,統一了這三平臺win、linux、mac生成dump的方式來捕捉崩潰。 大致研究了一下,主要依賴一個靜態庫和幾個頭文件,我這邊編譯出來放到網盤上大家自行使用。 鏈接: https://p ...
  • for迴圈用於多次執行特定的代碼塊,每次都可以使用不同的值。每次迴圈執行都稱為一次迭代。for迴圈可以包含最多三個語句: 語法 ```Go for 語句1; 語句2; 語句3 { // 每次迭代要執行的代碼 } ``` - 語句1:初始化迴圈計數器的值。 - 語句2:對每次迴圈迭代進行評估。如果評估 ...
  • ## Synchronized 本篇文章將圍繞synchronized關鍵字,使用大量圖片、案例深入淺出的描述CAS、synchronized Java層面和C++層面的實現、鎖升級的原理、源碼等 大概觀看時間17分鐘 可以帶著幾個問題去查看本文,如果認真看完,問題都會迎刃而解: 1、synchro ...
  • 小魚和魔法師繼續深入魔法森林。不久,他們來到了一個巨大的魔法石圈旁邊。石圈中心有一個閃閃發光的魔法水晶,周圍則是一些神秘的符號。但令人意外的是,水晶的旁邊還有一個巨大的石像怪,它的眼睛散髮著紅色的光芒,似乎正在守護著這片區域。 小魚好奇地問:“這是什麼地方?這些符號又是什麼意思?那個石像怪又是怎麼回 ...
  • 大家好,我是棧長。 昨天有粉絲反饋棧長《[Spring Boot 核心技術課](https://mp.weixin.qq.com/s/hJwHvmalVWJObyVkytfdsA)》中的一個問題: ![](https://img2023.cnblogs.com/other/1218593/20230 ...
  • 最近又是一輪代碼review , 發現了一些實現去重的代碼,在使用 list.contain ...... ![](https://img2023.cnblogs.com/other/1218593/202309/1218593-20230906151256318-1035375358.png) 我 ...
  • 在日常開發中,當需要給一個現有類添加附加職責,而又不能採用生成子類的方法進行擴充時。例如,該類被隱藏或者該類是終極類或者採用繼承方式會產生大量的子類。這時候,我們該怎麼辦呢?我們可以使用裝飾器器模式來解決這個問題,**本文將從以下四個方面講解裝飾器器模式**。 - 簡介 - 優缺點 - 應用場景 - ...
  • 掩碼是一串二進位代碼對目標欄位進行位與運算 # 掩碼 掩碼通常是一個用於屏蔽或隱藏某些位的值,以便在計算中只關註感興趣的位。掩碼通常是一個由二進位位組成的數,用於按位與操作,以清除或保留某些位的值。 常見的用途包括: 1. **位操作和位掩碼**:在電腦編程中,位掩碼用於執行位操作,如按位與(AN ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...