ホームページ >バックエンド開発 >Golang >Go 言語のデータ型変換についての深い理解

Go 言語のデータ型変換についての深い理解

PHPz
PHPzオリジナル
2023-03-30 09:05:31990ブラウズ

日常のプログラミングでは、データ型変換は不可欠な操作であり、Golang 言語は強力なデータ型変換メカニズムも提供します。この記事では、Go 言語でのデータ型変換といくつかの一般的な使用シナリオについて詳しく説明します。

1. 型変換の基本概念

Golang では、データ型は基本型と複合型の 2 つの型に分類されます。このうち、基本型には整数、浮動小数点型、ブール型、文字列型、文字型などが含まれ、複合型には配列、スライス、マップ、構造体などが含まれます。型変換を行う場合、ある型の値を別の型の値に変換する必要がありますが、基本型間の変換は比較的簡単ですが、複合型の変換にはより多くの処理が必要です。

TYPES は Golang の組み込み型の 1 つで、型そのものを表します。 Golang では、型変換とは、ある型の値を別の型の値に変更することです。これは、T(x) などの型変換演算子を使用して実現できます。ここで、T はターゲットの型を表し、x は変換される値を表します。

たとえば、文字列を整数に変換する構文は次のとおりです。

s := "123"
i, err := strconv.Atoi(s)

上記のコードでは、strconv.Atoi() 関数は文字列型の値 s を整数型の値 i 。また、この関数は変換処理中に s の形式が整数の仕様に準拠しているかどうかもチェックし、準拠していない場合はエラーを返します。このため、型変換操作を実行するときにエラー メッセージを慎重に処理する必要があります。

2. 基本型間の変換

  1. 整数型間の変換

Golang では、整数型には符号付き整数型 (int、int8、int16、 int32、int64) および符号なし整数 (uint、uint8、uint16、uint32、uint64)。整数間で変換する場合、ソース型のビット数がターゲット型のビット数以下であれば、変換を直接実行できます。たとえば、int32 型の値を int16 型の値に変換します。

var i int32 = 100
var j int16 = int16(i)

ソース型のビット数がターゲット型のビット数より大きい場合、変換方法を決定する必要があります。特定のビジネス要件に基づいて変換を実行します。通常、変換を達成するには、ソース値を切り捨てるかモジュロを使用します。

var i int32 = 10000
var j int16 = int16(i % (1 << 16))
  1. 浮動小数点型間の変換

浮動小数点型間で変換する場合は、浮動小数点数の精度を考慮する必要があります。通常、浮動小数点数の精度は型変換プロセス中に失われるため、変換方法を合理的に選択する必要があります。

たとえば、float64 型の値を float32 型の値に変換します。

var f1 float64 = 1.23456
var f2 float32 = float32(f1)

浮動小数点数の型変換を行う場合、桁数の保持の問題に注意する必要があります。これはエンジニアリング用途にとって重要であり、非常に重要です。

  1. ブール型と文字列型の間の変換

Golang では、ブール値を文字列型に変換したり、文字列型の値をブール型に変換したりできます。このタイプの変換を実行する場合、言語によって提供されるツールを直接使用できます。

var b bool = true
var s string = strconv.FormatBool(b)
var b2 bool = strconv.ParseBool(s)

ParseBool() 関数は、文字列型の値を対応するブール値に解析できます。

3. 複合型間の変換

  1. 配列とスライス間の変換

Golang では、配列型の値を変換できます。スライスタイプの値ですが、その逆はありません。これは、スライス型は本質的に配列へのポインタであるため、配列型の代わりにスライス型を使用できるためです。配列とスライスの間で変換する場合、Go 言語が提供するツールを直接使用できます。

a := [3]int{1, 2, 3}
s := a[:]

上記のコードでは、配列 a をスライス タイプの値 s に変換します。この変換では新しいデータは作成されず、データへの参照が変更されるだけであることに注意してください。

  1. マッピングと構造間の変換

Golang では、構造型の値をマッピング型の値に変換できますが、その逆はできません。の。これは、マップ型が本質的にキーと値のペアのコレクションであるのに対し、構造型はデータ型の順序付きセットであるためです。

マッピングと構造の間で変換する場合、マッピングの型と構造の型の間の要素間の対応に注意する必要があります。通常、変換には Golang の組み込み json パッケージを使用できます。

type Person struct {
    Name string `json:"name"`
    Age  int    `json:"age"`
}
p := Person{"Tom", 18}
m, err := json.Marshal(p) // 结构体 => 映射
var p2 Person
err := json.Unmarshal(m, &p2) // 映射 => 结构体

上記のコードでは、構造体型の値 p をマッピング型の値 m に変換し、次にこのマッピング型の値 m を別の構造体型の値 p2 に変換します。

4. 概要

日常のプログラミングでは、データ型変換操作を頻繁に実行する必要がありますが、Golang 言語は豊富な型変換メカニズムを提供します。型変換を実行するときは、ソース型とターゲット型の違い、およびビット数と精度の問題にどのように対処するかに注意する必要があります。複合型を変換する場合は、要素間の対応関係にも注意する必要があります。

型変換メカニズムを深く理解することで、より柔軟にプログラミングに Golang 言語を使用し、一般的なデータ型操作をより効率的に処理できるようになります。

以上がGo 言語のデータ型変換についての深い理解の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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