TechLeadCloud をフォローして、インターネット アーキテクチャとクラウド サービス テクノロジーに関する完全な知識を共有してください。著者は 10 年以上のインターネット サービス アーキテクチャ、AI 製品の研究開発、チーム管理の経験があり、復旦大学同済大学で修士号を取得し、復丹ロボット知能研究所のメンバーであり、Alibaba Cloud 認定の上級アーキテクトです。 、プロジェクト管理の専門家、AI 製品の研究開発で数億の収益を上げています。
1. Goキーワードのリストと分類
導入
キーワードはプログラミング言語で事前に定義された一連の特別な単語であり、それぞれのキーワードには明確な機能と目的があります。Go プログラミング言語では、キーワードはプログラムの論理フレームワークを構築する役割を果たし、プログラムのセマンティクスと構造の基礎となります。この記事は、プログラミングにおける 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 キーワードを使用して複雑な論理構造を作成できます。
キーワードの分類
さまざまなコード要素を宣言する
キーワード | 説明する |
---|---|
定数 | 1 つ以上の定数を宣言するために使用されます |
機能 | 新しい関数を定義するために使用されます |
輸入 | 外部パッケージをインポートするために使用されます |
パッケージ | パッケージ名を宣言するために使用され、通常は各 Go ソース ファイルの最初の行にあります。 |
タイプ | 構造体、インターフェイス、エイリアスなどのカスタム タイプを宣言するために使用されます。 |
だった | 1 つ以上の変数を宣言するために使用されます |
複合型のリテラル表現
キーワード | 説明する |
---|---|
ちゃん | 新しいチャネル(チャネル)を宣言するために使用されます |
インターフェース | 新しいインターフェースを定義するために使用されます |
地図 | 新しいマップ (キーと値のストア) を宣言するために使用されます。 |
構造体 | 新しい構造を定義するために使用されます |
基本的なフロー制御構文
キーワード | 説明する |
---|---|
壊す | 現在のループまたはswitch ステートメントを中断するために使用されます |
場合 | switch ステートメント内の分岐 |
続く | 現在のループ反復の残りのステートメントをスキップし、次の反復に入ります。 |
デフォルト | switch ステートメント内のデフォルトの分岐 |
それ以外 | if ステートメントの否定分岐 |
フォールスルー | ステートメントで使用されswitch 、制御フローに次の実行を継続させます。case |
のために | ループ用 |
後藤 | ラベルにジャンプ (非推奨) |
もし | 条件文 |
範囲 | for 配列、スライス、マップ、またはチャネルのループに使用されます |
戻る | 関数から値を返すために使用されます |
選択する | 複数のチャンネルを選択する場合 |
スイッチ | 複数分岐の選択ステートメントに使用されます |
コルーチンと遅延関数呼び出し
キーワード | 説明する |
---|---|
延期する | 関数の実行を遅らせるために使用され、通常はリソースをクリーンアップするために使用されます |
行く | 同時実行性を実現するために新しい goroutine を開始するために使用されます |
2. Go キーワードの完全なコード例
キーワードの完全なコード例
キーワード | コード例 | コード関数 |
---|---|---|
定数 | const PI = 3.14159 |
定数を定義するPI |
機能 | func add(x, y int) int { return x + y } |
add という名前の関数を定義します。 |
輸入 | import "fmt" |
インポートfmt パッケージ |
パッケージ | package main |
パッケージ名を定義しますmain |
タイプ | type Point struct {x, y int} |
Point という名前の構造体を定義します。 |
だった | var name string = "John" |
name という名前の変数を定義します |
ちゃん | ch := make(chan int) |
整数型の新しいチャネルを作成します |
インターフェース | type Writer interface { Write([]byte) error } |
Writer という名前のインターフェイスを定義します。 |
地図 | m := map[string]int{"one": 1} |
文字列キーと整数を値として使用するマップを作成する |
構造体 | type Circle struct { Radius float64 } |
Circle という名前の構造体を定義します。 |
壊す | if x > 0 { break } |
の場合x > 0 、ループから抜け出す |
場合 | case "apple": fmt.Println("It's an apple") |
switch ステートメントでは、case |
続く | if x < 0 { continue } |
の場合x < 0 、現在のループ反復をスキップします。 |
デフォルト | 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: |
用于控制流语句,如break 和continue 。 |
空标识符 | _ |
用于忽略不需要的值。 |
导出标识符 | 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
: for ループに使用されます。ここでは無限ループを示します。if
,else
: 条件判定に使用します。switch
、case
、default
: 複数条件の判定に使用します。break
: ループから抜け出すために使用されます。continue
: 現在のループ反復をスキップするために使用されます。
TechLeadCloud をフォローして、インターネット アーキテクチャとクラウド サービス テクノロジーに関する完全な知識を共有してください。著者は 10 年以上のインターネット サービス アーキテクチャ、AI 製品の研究開発、チーム管理の経験があり、復旦大学同済大学で修士号を取得し、復丹ロボット知能研究所のメンバーであり、Alibaba Cloud 認定の上級アーキテクトです。 、プロジェクト管理の専門家、AI 製品の研究開発で数億の収益を上げています。