ホームページ  >  記事  >  バックエンド開発  >  Go言語のタプルとは何ですか?

Go言語のタプルとは何ですか?

青灯夜游
青灯夜游オリジナル
2022-12-27 11:27:274914ブラウズ

タプルは固定長で不変の逐次コンテナ (要素シーケンス) であり、Go 言語にはタプル型はなく、配列はタプルに相当します。 Go 言語では、配列は特定の型の固定長要素で構成されるシーケンスです。配列は 0 個以上の要素で構成できます。配列の宣言構文は「var 配列変数名 [要素数]Type」です。 」。

Go言語のタプルとは何ですか?

このチュートリアルの動作環境: Windows 7 システム、GO バージョン 1.18、Dell G3 コンピューター。

タプルとは

タプル(tuple):アクセス効率が高く、長いデータを格納するのに適した固定長不変の逐次コンテナ一定のデータ。

単純に理解すると、コンテナに大量のデータを格納することになりますが、このコンテナは非常に頑固で、一度定義すると変更できないという特徴があります。変更されたリストの機能はリストと同様であり、スライスや変更などの操作も実行できます。

Go 言語にはタプル型はありません

Go 言語の配列は Python のタプルに相当します。

配列は、特定の型の固定長要素のシーケンスです。配列は、0 個以上の要素で構成できます。

Go 言語の配列

配列の宣言

配列の宣言構文は次のとおりです。

var 数组变量名 [元素数量]Type

構文の説明は次のとおりです。

  • 配列変数名: 配列を宣言して使用するときの変数名。

  • 要素の数: 配列の要素の数は式にすることができますが、コンパイル時に計算される最終結果は整数値である必要があります。要素の数は、次の値まで含めることはできません。実行時にサイズを確認します。

  • 型: 配列自体を含む任意の基本型を使用できます。型が配列自体の場合、多次元配列を実装できます。

Go 言語では、配列を作成するには、配列変数を宣言し、その長さとデータ型を指定します。

には 2 つの要素しか含まれておらず、3 番目の要素には値を割り当てることができないため、コンパイル フェーズ エラーが発生します。

var cheeses [2]string
cheeses[O] = "Mar iolles”
cheeses[l] = ” Epoisses de Bourgogne ”

配列の各要素にはインデックス添字を介してアクセスできます。インデックス添字の範囲は、0 から配列の長さから 1 を引いた値までです。組み込み関数 len() は数値を返すことができます。配列内の要素の数。

var a [3]int             // 定义三个整数的数组
fmt.Println(a[0])        // 打印第一个元素
fmt.Println(a[len(a)-1]) // 打印最后一个元素
// 打印索引和元素
for i, v := range a {
    fmt.Printf("%d %d\n", i, v)
}
// 仅打印元素
for _, v := range a {
    fmt.Printf("%d\n", v)
}

デフォルトでは、配列の各要素は、要素の型に対応するゼロ値 (数値型の場合は 0) に初期化されます。同時に、配列リテラル構文を使用して初期化することもできます配列:

var q [3]int = [3]int{1, 2, 3}
var r [3]int = [3]int{1, 2}
fmt.Println(r[2]) // "0"

配列の定義で、配列の長さの位置に「...」省略記号が表示されている場合は、配列の長さが次の値に基づいて計算されることを意味します。したがって、上記の配列 q の定義は次のように簡略化できます:

q := [...]int{1, 2, 3}
fmt.Printf("%T\n", q) // "[3]int"

配列の長さは配列型の整数部分であるため、[3]int と [4] int は 2 つの異なる配列型であり、配列の長さはコンパイル段階で決定する必要があるため、配列の長さは定数式である必要があります。

q := [3]int{1, 2, 3}
q = [4]int{1, 2, 3, 4} // 编译错误:无法将 [4]int 赋给 [3]int

2 つの配列が等しいかどうかを比較

2 つの配列の型 (配列の長さと配列内の要素の型を含む) が同じ場合、次のようになります。比較演算子 (== および !=) を直接使用して、2 つの配列が等しいかどうかを判断できます。配列は、2 つの配列のすべての要素が等しい場合にのみ等しいです。タイプの異なる 2 つの配列は比較できません。そうでない場合、プログラムは比較できません。完全なコンパイル。

a := [2]int{1, 2}
b := [...]int{1, 2}
c := [2]int{1, 3}
fmt.Println(a == b, a == c, b == c) // "true false false"
d := [3]int{1, 2}
fmt.Println(a == d) // 编译错误:无法比较 [2]int == [3]int

配列の走査 - 各配列要素にアクセス

配列の走査は、スライスの走査と同様です。コードは次のとおりです:

var team [3]string
team[0] = "hammer"
team[1] = "soldier"
team[2] = "mum"
for k, v := range team {
    fmt.Println(k, v)
}

コード出力結果:

Go言語のタプルとは何ですか?

コードの説明は次のとおりです:

  • 6 行目、for ループを使用してチームを横断します。配列を探索し、キー k は配列のインデックス、値 v は配列の各要素の値です。

  • #7 行目、各キーの値を出力します。

Golang でのタプル関数の実装

他の言語にもタプル型はありますが、Go 言語では提供されていません。しかし、絶望する必要はありません。go の他の機能により、タプル関数の実装が非常に簡単になります。次の例は、Go がタプル型関数を実装する方法を示しています。


struct

tuple を使用すると、さまざまなデータ型を保存できます。インターフェース タイプを使用して、あらゆるデータ型をサポートできます。{}

package main

import "fmt"

func main() {
	type Student struct {
		name, age interface{}
	}

	stuList1 := []Student{
		{"tom", 21},
		{"jack", 22},
	}

	stuList2 := []Student{
		{"mary", 30},
	}
	// append stuList2 to stuList1
	stuList1 = append(stuList1, stuList2...)

	for _, stu := range stuList1 {
		fmt.Println(“stuInfo:”,stu)
	}
}


/*
Output:
stuInfo: {tom 21}
stuInfo: {jack 22}
stuInfo: {mary 30}
*/
出力を見ると、結果がタプル型に似ていることがわかります。また、ドットを通じて個々の属性にアクセスすることもできます。これらの機能はタプルに関連していますが、実際にはタプルの種類ではありません。

複数の値を返す

タプル関数を使用して複数の値を返すことができます。 go にはタプル型はありませんが、複数の値を返す戻り関数をサポートしています。

package main

import "fmt"

func multipleValues() (string, int) {
	return "Alex", 21
}

func main() {
	name, age := multipleValues()
	fmt.Println("Name :", name)
	fmt.Println("Age :", age)
}

/*
Output:
Name : Alex
Age : 21
*/
ここでは、一度に複数の値が返されることがわかります。

【関連する推奨事項: Go ビデオ チュートリアル プログラミング教育 ]

以上がGo言語のタプルとは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。