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
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...