ホームページ  >  記事  >  バックエンド開発  >  golang の型変換はOK

golang の型変換はOK

WBOY
WBOYオリジナル
2023-05-10 12:22:08462ブラウズ

Go 言語 (Golang) は、C、Java、Python などの言語の影響を受けたオープンソース プログラミング言語で、効率的で信頼性の高いソフトウェアを作成するために Google によって開発されました。プログラムはそれを記述する言語と密接な関係があり、感情や思考を表現する言語と同様に、プログラミング言語にも独自の特徴があります。 Go 言語では型変換が多くの場面で使用されるため、型変換は非常に重要な概念ですが、この記事では Golang の型変換に関する関連知識を紹介します。

1. 型変換の概要

型変換は、あるデータ型の値を別のデータ型の値に変換するプロセスです。 Go 言語では、データ型は基本データ型と複合型に分類されます。基本的なデータ型には、int、float、string、bool などの型が含まれます。複合タイプには、配列、スライス、辞書、構造、インターフェイス、関数が含まれます。 Go言語では、異なる型間の値を直接操作したり比較したりすることはできません。そのため、異なる型間で値を型変換する必要があります。 Golang は、符号付き整数、符号なし整数、浮動小数点数、ブール値、文字列、その他の型の変換をサポートしています。型変換の構文は次のとおりです: T(x)、T は変換先の型を表し、x は変換される値を表します。

2. 基本的なデータ型変換

1. 整数型変換

Go 言語では、整数型には符号付き整数と符号なし整数があり、変換をサポートする整数型は int8 です。 、int16、int32、int64、uint8、uint16、uint32、および uint64。このうち、int8 と uint8 はバイト型、int16 と uint16 は短整数型、int32 と uint32 は長整数型、int64 と uint64 は長整数型と呼ばれます。

整数型を変換する場合は、以下の 2 点に注意する必要があります。

  • 変換時に、値の範囲が変換対象の型の値の範囲を超える場合、オーバーフローしてしまい、結果が不正確になります。たとえば、int8 の範囲より大きい値を int8 型に変換すると、[-128, 127] の範囲内の値が不正確になります。整数型に関するオーバーフローの問題は回避する必要があります。
  • 同じ型の変換、または低精度型から高精度型への変換のみが安全です。たとえば、int8 から int16 への変換は安全ですが、int16 から int8 への変換は、int8 への変換時に一部のデータが傍受され、結果が不正確になる可能性があるため安全ではありません。

以下は整数型変換の例です:

package main

import "fmt"

func main() {
    var a int32 = 100
    var b int64 = int64(a)   // int32转换成int64
    var c int8 = int8(a)     // int32转换成int8,可能溢出
    var d uint16 = uint16(a) // int32转换成uint16
    fmt.Println(b, c, d)
}

出力結果は次のとおりです:

100 100 100

2. 浮動小数点型変換

Go 言語では、浮動小数点数型には float32 と float64 が含まれますが、変換をサポートする浮動小数点数型は float32 と float64 のみです。浮動小数点数型を変換する場合、次の 2 つの注意点があります。

  • 変換中に値の範囲が大きすぎたり、小さすぎたりすると、オーバーフローが発生する可能性があります。
  • 低精度型から高精度型への変換のみ可能高精度型から低精度型へ変換すると精度が失われる可能性があります。

以下は浮動小数点型変換の例です:

package main

import "fmt"

func main() {
    var a float32 = 3.1415926
    var b float64 = float64(a) // float32转换成float64
    fmt.Println(b)
}

出力結果は次のとおりです:

3.1415927410125732

3. ブール型変換

Go 言語では、Boolean 型には true と false の 2 つの値しかなく、変換をサポートする型は int 型と string 型だけです。ブール値を int に変換する場合、true は 1 に変換され、false は 0 に変換されます。ブール値を文字列に変換する場合、true は "true" に変換され、false は "false" に変換されます。

以下はブール型変換の例です:

package main

import "fmt"

func main() {
    var a bool = true
    var b int = int(a)     // true转换成int,值为1
    var c string = string(a) // true转换成字符串,值为"true"
    fmt.Println(b, c)
}

出力結果は次のとおりです:

1 true

4. 文字列型変換

Go 言語では、文字列は文字シーケンスで構成される (不変の) 配列であり、変換をサポートする型はプリミティブ型のみです。文字列変換は、strconv パッケージを通じて実現できます。整数を文字列に変換する場合は strconv.Itoa() 関数を使用でき、浮動小数点数を文字列に変換する場合は strconv.FormatFloat() 関数を使用できます。

次は文字列型変換の例です:

package main

import (
    "fmt"
    "strconv"
)

func main() {
    var a int = 100
    var b string = strconv.Itoa(a) // 将整数转换成字符串
    var c float64 = 3.1415926
    var d string = strconv.FormatFloat(c, 'f', 6, 64) // 将浮点数转换成字符串,保留6位小数
    fmt.Println(b, d)
}

出力結果は次のとおりです:

100 3.141593

3. 複合型変換

1. 配列型変換

Go 言語では、配列は同じ型の要素で構成される固定長のシーケンスです。配列間で値を直接割り当てることもできますが、配列のサイズと型が同じである必要があることに注意してください。同じでないとコンパイル エラーが発生します。

次は配列型変換の例です:

package main

import "fmt"

func main() {
    var a [3]int = [3]int{1, 2, 3}
    var b [3]int = a // 数组之间可以直接赋值
    fmt.Println(b)
}

出力結果は次のとおりです:

[1 2 3]

2. スライス型変換

Go 言語では、スライス 配列へのポインタ、スラ​​イスの長さと容量を含む構造体であり、可変長のシーケンスです。値はスライス間で直接割り当てることができますが、スライスの要素タイプは同じである必要があることに注意してください。

次はスライス型変換の例です:

package main

import "fmt"

func main() {
    a := []int{1, 2, 3, 4}
    b := a // 切片之间可以直接赋值
    fmt.Println(b)
}

出力結果は次のとおりです:

[1 2 3 4]

3. 辞書型変換

Go 言語では、 Dictionary キーと値のペアのコレクションです。値はディクショナリ間で直接割り当てることができますが、ディクショナリのキーと値のタイプは同じである必要があることに注意してください。

以下は辞書型変換の例です:

package main

import "fmt"

func main() {
    a := map[string]int{"apple": 1, "banana": 2}
    b := a // 字典之间可以直接赋值
    fmt.Println(b)
}

出力結果は次のとおりです:

map[apple:1 banana:2]

4. まとめ

Go 言語では、型変換は非常に重要な概念です。型変換では、プログラムのニーズを満たすために、異なる型の間で値を変換できます。ただし、型変換を行う際には、データ型範囲のオーバーフローや精度損失の問題を回避する必要があると同時に、変換後の型が変換前の型と互換性があることを確認する必要があることに注意してください。型変換は、基本データ型と複合データ型の間に適用されます。型変換の関連知識を習得することは、Golang プログラミングにとって非常に重要です。

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

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