Go 言語プログラミング設計学習 1 日目: helloworld 変数と定数

Go 言語の簡単な理解

Go 言語の歴史を簡単に理解すると、1980 年代に Ken Thompson を含む Plan 9 プロジェクトのオリジナル メンバーが Google に入社し、Go 言語を作成しました。2007 年 9 月の時点では、Go 言語はまだ
実験プロジェクトであり、専門家の自由時間の 20% が割り当てられていました。
幸いなことに、2008 年 5 月までに Google は Go 言語の大きな可能性を発見し、プロジェクトを全面的にサポートし始め、これらの人々が Go 言語の設計と開発に専念できるようになりました。Go 言語の最初のバージョンは
2009 年 11 月に正式にリリースされ、その後 2 年間で急速に反復され、急速に開発されました。Go 言語の最初の公式バージョンは
2012 年 3 月 28 日に正式にリリースされ、Go 言語は最初の注目すべきマイルストーンを迎えました。

Google の一貫したスタイルはオープンソースを採用しているため、github で go のソース コードをダウンロードして表示したり、新しいコンテンツを go に提供したりすることもできます。

以下は、Go 言語の主な機能のリストです。
 自動ガベージ コレクション
 豊富な組み込み型
 関数の複数の戻り値 
エラー処理
 匿名関数とクロージャ
 型とインターフェイス
 同時プログラミング
振り返り
 言語の対話性

開発環境を構成する

  • ダウンロードして行く

  • gopath (go コードの保存スペース)、goroot (go language sdk/bin フォルダー) を設定します。

  • vscode は go から複数のプラグインをインポートします

    ここに画像の説明を挿入します

  • go コードのストレージ構造を作成する

画像-20221215160913042

最初の囲碁プログラム

//  声明文件所存在的位置 packge
package main

// 进入需要使用的工具库(包)
import "fmt"

// main 函数 程序的入口
func main(){
    
    
	fmt.Println("hello golang")
}

よく使用されるコマンド

  • go file を実行 go run xxxx
  • 実行可能ファイルを生成 go build xxx

変数

プログラムは小さな世界と考えることができ、どの世界がその一部であっても、変数はプログラムの世界の一部です。

変数は実際にはメモリに格納されているデータ空間を表現したもので、さまざまな型を持つ場合があります。

画像-20221215161403147

Go言語の変数宣言方法は、C言語やC++言語とは明らかに異なります。純粋な変数宣言のためにGo言語を導入

Go言語の変数宣言方法は、C言語やC++言語とは明らかに異なります。純粋な変数宣言の場合、Go 言語では
キーワード var が導入され、変数名の後に型情報が配置されます。例は次のとおりです。

var v1 int
var v2 string
// 数组
var v3 [10]int
// 数组切片
var v4 []int
var v5 struct {
    
    
  f int
  }
 // 指针
var v6 *int
 // map,key为string类型,value为int类型
var v7 map[string]int
var v8 func(a int) int

変数宣言ステートメントはセミコロンで終了する必要はありません。C 言語と比較して、Go 言語では
ステートメントの終了マークとしてセミコロンを使用する習慣が廃止されています。

キーワード var と型情報は変数名の後に配置されます。例は次のとおりです。

  1. var v1 int
  2. var v2 文字列
  3. var v3[10]int
  4. // 配列
  5. var v4 []int
  6. // 配列スライス
  7. var v5 構造体 {
  8. f int
  9. }
  10. ここで、v6 *int
  11. // ポインタ
  12. var v7 マップ[文字列]int
  13. // マップ、キーは文字列型、値は int 型
  14. var v8 func(a int) int
  15. 変数宣言ステートメントはセミコロンで終了する必要はありません。C 言語と比較すると、Go 言語はステートメントをセミコロンで区切る必要があるという事実を放棄しています。
  16. ステートメントの終わりをマークする規則。

変数の使用プロセス

Go言語で変数を宣言する(型には直接使用できるデフォルト値があります) を使用する必要があります。使用しないと、コンパイル例外が発生します。

  • 声明
  • コピー
  • 使用

例:

	var age int
	age = 18
	fmt.Println("age=",age)

変数の初期化方法

変数の宣言時に初期化が必要なシナリオでは、var キーワードを保持できますが、これは必須の要素ではなくなりました。

var v1 int = 10 // 正确的使用方式1
var v2 = 10
// 正确的使用方式2,编译器可以自动推导出v2的类型
v3 := 10
// 正确的使用方式3,编译器可以自动推导出v3的类型

型を指定する必要はなくなりました。Go コンパイラーは、初期化式の右辺値から、変数を として宣言する必要がある型を推測できます。これにより、
Go 言語は動的型付け言語のように見えますが、実際には Go 言語は A 型です。本当に強く型付けされた言語
(静的型付け言語)。

注意事項: = 左側の変数は宣言されるべきではありません。宣言されていないと例外が発生します。

var i int
i := 2
会导致类似如下的编译错误:
no new variables on left side of :=

変数の代入

Go 構文では、変数の初期化と変数の割り当ては 2 つの異なる概念です。変数宣言後の代入処理は以下のとおりです

var v10 int
v10 = 123


Go 言語での変数の割り当てはほとんどの言語の変数割り当てと一致していますが、Go 言語では、i 変数と j 変数を交換する次のステートメントなど、C/C++ プログラマーが長年待ち望んでいた複数の割り当て機能が提供されます。

i, j = j, i

複数の代入をサポートしていない言語では、2 つの変数の内容を交換するには中間変数を導入する必要があります。

t = i; i = j; j = t;

匿名変数

Go では、複数の戻り値と匿名変数を組み合わせて、不要な変数を定義するという醜い方法を回避し、コードをよりエレガントに見せることで、この状況を回避できます。

GetName() 関数が次のように定義されているとします。この関数は、firstName、lastName、
nickName の 3 つの値を返します。

func main(){
    
    
	// var v1 int  = 10
	// var v2 = 10
	// v3:= 3
	// fmt.Println(v1,v2,v3);
	_, _, nickName:= GetName()
	fmt.Println(nickName);
}
//若只想获得nickName,则函数调用语句可以用如下方式编写
func GetName()(firstName,lastName,nickName string){
    
    
	return "may", "chan", "chibi maruko"
}

出力結果:

chibi maruko

この使用法により、コードが非常に明確になり、コードリーダーを混乱させる可能性のあるコンテンツを基本的にブロックできるため、通信の複雑さとコードのメンテナンスの困難さが大幅に軽減されます。

絶え間ない

Go 言語では、定数はコンパイル中に既知であり、変更できない値を指します。定数には、数値型 (整数、浮動小数点、複素数型を含む)、ブール型、文字列型などがあります。

リテラル定数

いわゆるリテラル定数は、次のようなプログラム内でハードコーディングされた定数を指します。

-12
3.14159265358979323846
// 浮点类型的常量
3.2+12i
// 复数类型的常量
true
// 布尔类型的常量
"foo"
// 字符串常量

Go 言語では型指定がありません。この定数が対応する型の値の範囲内にある限り
、その型の定数として使用できます。

定数の定義

const キーワードを使用すると、リテラル定数にわかりやすい名前を付けることができます。

const Pi float64 = 3.14159265358979323846
const zero = 0.0 // 无类型浮点常量
const (
size int64 = 1024
eof = -1 // 无类型整型常量
)
const u, v float32 = 0, 3 // u = 0.0, v = 3.0,常量的多重赋值
const a, b, c = 3, 4, "foo"
// a = 3, b = 4, c = "foo", 无类型整型和字符串常量

Go の定数定義では定数の型を修飾できますが、これは必須ではありません。型を指定せずに定数が定義された場合、それは
リテラル定数と同様に型なし定数になります。
定数定義の右辺値は、次のようにコンパイル時に評価される定数式にすることもできます。

const mask = 1 << 3

事前定義された定数

Go 言語では、true、false、iota という定数が事前に定義されています。

iota は特別であり、コンパイラによって変更できる定数と考えることができます。const キーワードが出現するたびに 0 にリセットされます。その後、次の const が出現する前に、iota が出現するたびに、iota が表す数値が自動的に増加します
。 1.

基本的に、iota の使用法は次の例から理解できます。

const (
// iota被重设为0
c0 = iota// c0 == 0
c1 = iota// c1 == 1
c2 = iota// c2 == 2
)
const (
a = 1 << iota// a == 1 (iota在每个const开头被重设为0)
b = 1 << iota// b == 2
c = 1 << iota// c == 4
)
const (
u = iota * 42 // u == 0
v float64 = iota * 42 // v == 42.0
w = iota * 42// w == 84
)
const x = iota// x == 0 (因为iota又被重设为0了)
const y = iota// y == 0 (同上)
    

2 つの const 代入文の式が同じ場合、後者の代入式は省略できます。したがって、上記の最初の 2 つの const ステートメントは次のように短縮できます。

const (
// iota被重设为0
c0 = iota // c0 == 0
c1 // c1 == 1
c2 // c2 == 2
)
const (
a = 1 <<iota // a == 1 (iota在每个const开头被重设为0)
b // b == 2
c // c == 4
)

列挙する

列挙は、次の各曜日の定義など、一連の関連する定数を指します。前のセクションの例では、const に続けて 1 対のかっこを使用して定数のセットを定義できることがわかりました。この定義方法は通常、Go 言語で列挙値を定義するために使用されます。Go 言語は、他の言語が明示的にサポートしている enum キーワードの多くをサポートしていません。

const (
Sunday = iota
Monday
Tuesday
Wednesday
Thursday
Friday
Saturday
numberOfDays // 这个常量没有导出
)

Go 言語の他のシンボルと同様に、大文字で始まる定数はパッケージの外でも表示されます。
上記の例では、numberOfDays はパッケージ内でプライベートであり、他のシンボルは他のパッケージからアクセスできます。

おすすめ

転載: blog.csdn.net/doomwatcher/article/details/128333701