Go 言語のデータ構造には 4 つの主要なカテゴリがあります。 1. 整数 (符号付きおよび符号なし整数)、浮動小数点数、複素数、文字列 (不変のバイト シーケンスで構成される) などの基本型、ブール値(2 つの値のみ: true と false); 2. 配列および構造体を含む集計タイプ (任意のタイプの任意の数の変数で構成されるデータタイプ); 3. ポインターおよびスライスを含む参照タイプ (はい、変数-同じ要素を持つ長さのシーケンス)、マップ、関数、チャネル; 4. インターフェイスのタイプ。
このチュートリアルの動作環境: Windows 7 システム、GO バージョン 1.18、Dell G3 コンピューター。
すべての言語には独自のデータ構造があり、Go 言語も例外ではなく、大きく分けて 基本型、集合型、参照型、インターフェイス型 の 4 つのカテゴリがあります。この記事では、これらのタイプを簡単に紹介します。
Go の整数型の分類符号付き整数と符号なし整数。
符号付き整数は int8、int16、int32、int64 に分割されます
符号なし整数は uint8、uint16、uint32、uint64 に分割されます
ただし、通常、int と uint はこれら 2 つの型は、プラットフォームの特性に従って最も効率的な型に自動的に変換されるため、直接使用されます。32 ビット未満のコンピューターは現在では珍しいため、int は通常 32 または 64 ビットですが、プラットフォームとコンパイルによって異なります。デバイスが決定します。 [関連する推奨事項: Go ビデオ チュートリアル 、プログラミング チュートリアル ]
int は現在最も広く使用されている数値型です。値を直接 int を使用します。
一般的には、符号付き整数で十分であり、符号なし整数はビット演算または特定の算術にのみ使用されます。
uintptr と rune は 2 つの特殊な数値型です。uintptr のサイズは不明ですが、ポインターの格納に使用されます。主に、Go 言語と C 言語間の対話など、低レベルのプログラミングに使用されます。
== と != を使用して 2 つの値を比較できる場合、2 つの値は比較できることを意味します。
整数は比較可能です。
Go 言語には、整数データに加えて、浮動小数点数 と の 2 つのデータ型があります。複数###。
浮動小数点数には、float32 と float64 の 2 種類があります。浮動小数点数は、通常、e または E で表される指数表記を使用します。 float32 の正の数の範囲は 1.4e-45 ~ 3.4e38float64 の正の数の範囲は 4.9e-324 ~ 1.8e30810 進数では、 float64 の有効桁数は 15 桁であり、float32 の 5 桁に比べてはるかに多いため、特別な事情がない限り、float64 を優先して使用する必要があります。 複素数には、complex64 と complex128 の 2 種類があり、それぞれ float32 と float64 で構成されます。math/cmplx このライブラリは、複素数演算に必要な関数を提供します。
true と
false の 2 つだけです。 ! 記号を使用して否定演算を実行できます (!true は false です)。
var i = 1 // i < 100 代码就不会被执行 if i > 0 || i < 100 { fmt.Printf("result %+v", i) }
は 同じ である必要がありますが、構造内の要素 は異なる であってもかまいません。 数组是一个长度固定,拥有0 个或多个(不超过数组长度)相同数据类型的序列。数组在声明的时候必须指定长度,可以使用常量,但是不能使用变量。 实际上,我们很少在代码中直接使用数组,数组在绝大部分的时候都是做为 slice 的底层存储,并不会直接使用。 数组的可比较性取决于元素的可比较性,如果元素是可比较的,那么数组也是可比较的,反之亦然。 结构体是由任意个任意类型的变量组合在一起的数据类型,和其他语言中类的概念相似。 Go 语言是一个面向对象的语言,但却又抛弃了 Java 中类和对象的概念,结构体是 Go 语言实现面向对象的基础之一,还有一部分是接口,下面会聊到。 在 Go 的面向对象中,已经摈弃了继承的概念,但在结构体中,通过结构体嵌套,也算是实现了部分继承的功能。 结构体的可比较性也取决于其中变量的可比较性。 引用是另外一种数据类型,很多 Go 语言的高级功能都依赖引用。引用都间接指向变量或者状态,通过引用来操作数据会让该数据的全部引用都受影响。 指针是一种数据类型,指针的值是一个变量的地址。对于一个变量来说,可以有多个指针,通过其中任意一个指针来修改数据,通过其他指针也会获取到最新修改的值。数组
结构体
type Student struct {
Name string
age int
}
3. 引用类型
指针
i := 1
p1 := &i
p2 := &i
*p1 = 2
fmt.Println(*p2) // 2
指针是可比较的。
slice 是一个拥有相同元素的可变长度序列。 slice 看起来与数组很像,但本质上不同。
slice 依赖数组,没有数组,就没有 slice。
一个 slice 有三个属性,指针,长度和容量。其中指针指向数组中的某个元素(不一定是第一个),这是 slice 可以访问的第一个元素。
长度是 slice 中元素的个数,不能超过容量,容量通常是指 slice 指针的位置,到底层数组的最后一个元素的位置的长度。
slice 不可比较, 只能和 nil 比较。
map 是散列表的引用。
map 的使用很简单,但是需要注意一点,map 的 key 必须是可比较的,如果 key 不可比较,那就无法通过 key 查询到响应的 value,value 的类型是没有限制的,可以是任意值。
map 不可比较,只能和 nil 比较。
function 就是函数,在写 Go 的 helloworld 程序时,就会用到函数。 函数也是一种引用类型。
function 本身不可比,只能和 nil 比较,但是可以通过反射获取函数指针进行比较。
Go 语言天然支持搞并发。而 channel 就是其中关键一环,goroutine 用来并发执行任务。而 channel 则用来连接不同的 goroutine。channel 也是属于引用类型。
channel 是可比较的。
Go 语言中还有一个类型是接口类型。
接口是 Go 实现面向对象的关键。Go 的接口类型很特别,你不需要去显示的实现一个接口,只要把接口中的方法实现,就默认实现了这个接口。
接口类型是可比较的。
Go 的数据类型设计简洁,但扩展性很好,开发者可以根据自己的需要动态的扩展数据,不只是对于结构体这种聚合数据类型,即使对于基础数据类型,也可以根据的需要进行扩展。另外 Go 自带对 JSON、xml 以及 Protocol Buffer 的支持,不需要引入外部的库,这就使得写程序时会很轻量级,可以尽可能少的引入依赖包。
更多编程相关知识,请访问:编程入门!!
以上がGo言語にはどのようなデータ構造がありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。