Go言語にはどのようなデータ型がありますか?
Go 言語のデータ型は次のとおりです: 1. ブール型、値は定数 true または false のみです; 2. 数値型、整数と浮動小数点数をサポートし、複素数をサポートします; 3 . 文字列型は、固定長の文字列でつながった文字列です; 4. ポインタ型; 5. 配列型; 6. 構造化型; 7. チャネル型; 8. 関数型; 9. スライス型; 10.インターフェイス タイプ; 11. マップ タイプ。
このチュートリアルの動作環境: Windows 7 システム、GO バージョン 1.18、Dell G3 コンピューター。
Go 言語のデータ型
Go プログラミング言語では、関数と変数を宣言するためにデータ型が使用されます。
データ型の登場は、データを異なるメモリサイズのデータに分割することであり、プログラミングの際、ビッグデータを使用する必要がある場合にのみ大きなメモリを適用する必要があり、データを最大限に活用することができます。メモリ。
Go 言語には、カテゴリに応じて次のデータ型があります。
シリアル番号 | タイプと説明 |
---|---|
1 |
ブール型 ブール型の値は定数 true または false のみです。簡単な例: var b bool = true。 |
2 |
数値型 整数型 int および浮動小数点型 float32、float64、Go 言語は整数型と浮動小数点型をサポートします、ビット演算で 2 の補数を使用する複素数をサポートします。 |
3 |
文字列型: 文字列は、固定長の文字で接続された一連の文字です。 Go の文字列は個々のバイトから連結されます。 Go 言語文字列のバイトは、Unicode テキストを識別するために UTF-8 エンコーディングを使用します。 |
4 |
派生型: 内容:
|
Go 言語の豊富なデータ型です。基本的な整数、浮動小数点型、ブール型、文字列に加えて、配列、スライス、構造体、関数、マップ、チャネルなどもあります。
1. 整数
- ##整数
#占有メモリ長に応じて分割
int8、int16、int32、int64
ログイン後にコピー
uint8、uint16、uint32、uint64
ログイン後にコピー
uint8 对应 byte 型 int16 对应 C 语言中的 short 型 int64 对应 C 语言中的 long 型
ログイン後にコピー
説明 | |
---|---|
符号付き 8 ビット整数 (-128 ~ 127) | |
符号付き 16 ビット整数型 (-32768 ~ 32767) | |
符号付き 32 ビット整数型 (-2147483648 ~ 2147483647) | |
符号付き 64 ビット整数型 (-9223372036854775808 ~ 9223372036854775807) | |
符号なし 8 ビット整数型 ( 0 ~ 255) | |
符号なし 16 ビット整数 (0 ~ 65535) | |
符号なし32ビット整数型(0~4294967295) | #uint64 |
##Type
int | ||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
uint | 32 ビット オペレーティング システムでは uint32、64 ビット オペレーティング システムでは uint64 | |||||||||||||||||||||||||||||
uintptr | 符号なし整数型、ポインタを格納するために使用されます | |||||||||||||||||||||||||||||
转义符 | 含义 |
---|---|
\r | 回车符 (返回行首) |
\n | 换行符 (直接跳到下一行的同列位置) |
\t | 制表符 |
' | 单引号 |
" | 双引号 |
\ | 反斜杠 |
5.3.字符串转义-实例演示
package main import ( "fmt" ) func main() { // 转义符的使用 fmt.Println("\n# 转义符的使用 str := \"c:\\go\"") }
5.4.字符串操作
方法 | 方法说明 |
---|---|
len(str) | 求长度 |
+或fmt.Sprintf | 拼接字符串 |
strings.Split | 分割 |
strings.contains | 判断是否包含 |
strings.HasPrefix,strings.HasSuffix | 前缀/后缀判断 |
strings.Index(),strings.LastIndex() | 子串出现的位置 |
strings.Join(a[]string, sep string) | join操作 |
5.5.字符串操作-实例演示
package main import ( "fmt" "strings" ) // 字符串操作 func main() { // 字符串求长度 s3 := "zhongguojueqi" fmt.Println("\n字符串-求长度: ", len(s3)) // 字符串拼接 s4 := "nihaoshijie" fmt.Println("\n字符串-拼接01: ", s3+s4) s5 := fmt.Sprintf("%s---%s", s3, s4) fmt.Println("\n字符串-拼接02: ", s5) // 字符串分割 s6 := strings.Split(s3, "o") fmt.Println("\n字符串-分割: ", s6) // 字符串包含判断 s7 := strings.Contains(s3, "o") fmt.Println("\n字符串-包含判断01: ", s7) fmt.Println("\n字符串-包含判断02: ", strings.Contains(s3, "o")) // 字符串前缀, 后缀判断 fmt.Println("\n字符串-前缀判断: ", strings.HasPrefix(s3, "zhong")) fmt.Println("\n字符串-后缀判断: ", strings.HasSuffix(s3, "qi")) // 字符串索引查找 fmt.Println("\n字符串-索引查找-第一个字符 o 的索引: ", strings.Index(s3, "o")) fmt.Println("\n字符串-索引查找-最后一个字符 o 的索引: ", strings.LastIndex(s3, "o")) // 字符串-join操作 s8 := []string{"aaa", "bbb", "ccc", "ddd"} fmt.Println("\n字符串-join 操作: ", strings.Join(s8, " + ")) }
6.字符
6.1.定义一个字符变量
- 组成字符串的元素叫做 字符,使用单引号进行定义字符类型变量,字符串使用双引号定义
- 可以通过遍历或者单个获取字符串元素获得字符
func runeDemo01() { // 字符定义 a := '中' // 默认识别为 rune 类型的字符变量 b := "中" // 定义一个字符串 var c byte = 'a' // 定义一个byte类型字符 var d rune = 'a' // 定义一个rune类型字符 fmt.Println(a, b) fmt.Printf("%v,%T\n", c, c) fmt.Printf("%v,%T\n", d, d) }
6.2.字符类型有两种
6.2.1.uint8-类型字符
- go 语言中一般的英文数字字符使用 ASCII 码的一个字符,占据 8 位 bit 的内存空间,也就是常用的 byte 型
6.2.2.rune-类型字符
- go 语言中处理中文日文或者其他复合字符时,需要用到 rune 类型,rune 类型实际是一个 int32,代表一个 UTF-8 字符(Unicode编码)
7.字符串拓展
7.1.字符串遍历-方法1-使用循环依次取出字符串中的元素
// 字符串遍历-traversalString package main import ( "fmt" ) func traversalString01() { s := "hello世界" for i := 0; i < len(s); i++ { // 中英文使用 for循环加 len() 方法遍历循环,但遇到中文会有乱码 fmt.Printf("%v(%c) ", s[i], s[i]) } fmt.Println() fmt.Println([]byte(s)) } ----------------------- 104(h) 101(e) 108(l) 108(l) 111(o) 228(ä) 184(¸) 150() 231(ç) 149() 140() -----------------------
7.2.字符串遍历-方法2-rune-类型遍历可以使用 for range 循环
package main import ( "fmt" ) // 遍历字符串 traversalString func traversalString02() { s := "hello世界" fmt.Println() for _, r := range s { // 按照 rune 类型遍历 fmt.Printf("%v(%c) ", r, r) } fmt.Println() fmt.Println([]rune(s)) } ----------------------- 104(h) 101(e) 108(l) 108(l) 111(o) 19990(世) 30028(界) -----------------------
- 结果分析:
1.因为 UTF8 编码下一个中文汉字由 3~4 个字节组成,所以我们不能简单的按照字节去遍历一个包含中文的字符串,否则就会出现上面输出中第一行的结果 2.字符串底层是一个 byte 数组,所以可以和 []byte 类型相互转换 3.字符串是不能修改的 字符串是由 byte 字节组成,所以字符串的长度是 byte 字节的长度 4.rune 类型用来表示 utf8 字符,一个 rune 字符由一个或多个 byte 组成。
7.3.字符串修改
- 字符串是固定值无法修改,如果要修改字符串,需要先将其转换成 []rune 或 []byte,完成后再转换为 string 类型。无论哪种转换,都会重新分配内存,并复制字节数组
func changeString() { s1 := "big" // 强制类型转换 byteS1 := []byte(s1) byteS1[0] = 'p' fmt.Println(string(byteS1)) s2 := "白萝卜" runeS2 := []rune(s2) runeS2[0] = '红' fmt.Println(string(runeS2)) }
8.类型转换
- Go语言中只有强制类型转换,没有隐式类型转换。该语法只能在两个类型之间支持相互转换的时候使用
8.1.类型转换-语法
T(表达式)
- 其中,T 表示要转换的类型,表达式包括变量、复杂算子和函数返回值等
8.1.类型转换-实例演示
func sqrtDemo() { var a, b = 3, 4 var c int // math.Sqrt()接收的参数是float64类型,需要强制转换 c = int(math.Sqrt(float64(a*a + b*b))) fmt.Println(c) }
- 说明
计算直角三角形的斜边长时使用 math 包的 Sqrt() 函数,该函数接收的是 float64 类型的参数
而变量 a 和 b 都是 int 类型的,这个时候就需要将 a 和 b 强制类型转换为 float64 类型
以上がGo言語にはどのようなデータ型がありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











redisstreamを使用してGo言語でメッセージキューを実装する問題は、GO言語とRedisを使用することです...

Golandのカスタム構造ラベルが表示されない場合はどうすればよいですか?ゴーランドを使用するためにGolandを使用する場合、多くの開発者はカスタム構造タグに遭遇します...

大企業または有名なオープンソースプロジェクトによって開発されたGOのどのライブラリが開発されていますか? GOでプログラミングするとき、開発者はしばしばいくつかの一般的なニーズに遭遇します...

GO言語は、効率的でスケーラブルなシステムの構築においてうまく機能します。その利点には次のものがあります。1。高性能:マシンコードにコンパイルされ、速度速度が速い。 2。同時プログラミング:ゴルチンとチャネルを介してマルチタスクを簡素化します。 3。シンプルさ:簡潔な構文、学習コストとメンテナンスコストの削減。 4。クロスプラットフォーム:クロスプラットフォームのコンパイル、簡単な展開をサポートします。

Golangは、パフォーマンスとスケーラビリティの点でPythonよりも優れています。 1)Golangのコンピレーションタイプの特性と効率的な並行性モデルにより、高い並行性シナリオでうまく機能します。 2)Pythonは解釈された言語として、ゆっくりと実行されますが、Cythonなどのツールを介してパフォーマンスを最適化できます。

GOプログラミングのリソース管理:MySQLとRedisは、特にデータベースとキャッシュを使用して、リソースを正しく管理する方法を学習するために接続およびリリースします...

Golangは並行性がCよりも優れていますが、Cは生の速度ではGolangよりも優れています。 1)Golangは、GoroutineとChannelを通じて効率的な並行性を達成します。これは、多数の同時タスクの処理に適しています。 2)Cコンパイラの最適化と標準ライブラリを介して、極端な最適化を必要とするアプリケーションに適したハードウェアに近い高性能を提供します。

Golangは迅速な発展と同時シナリオに適しており、Cは極端なパフォーマンスと低レベルの制御が必要なシナリオに適しています。 1)Golangは、ごみ収集と並行機関のメカニズムを通じてパフォーマンスを向上させ、高配列Webサービス開発に適しています。 2)Cは、手動のメモリ管理とコンパイラの最適化を通じて究極のパフォーマンスを実現し、埋め込みシステム開発に適しています。
