ホームページ  >  記事  >  バックエンド開発  >  golang キャスト

golang キャスト

王林
王林オリジナル
2023-05-10 22:39:081534ブラウズ

インターネット分野での Golang の幅広い応用に伴い、Golang の強制型変換に対する需要が高まっています。キャストとは、あるデータ型の値を別のデータ型の値に変換することであり、変換された値は切り捨てられたり、精度が失われる場合があります。この記事では、Golang の強制型変換に関する関連知識を以下の 4 つの側面から紹介します。

1. 強制型変換の構文

Golang では、さまざまなデータ型について、強制型変換を通じて他の型に変換できます。構文は次のとおりです。

T(expression)

このうち、T はターゲットの型を表し、expression はキャストする必要がある式を表します。

たとえば、int 型変数を float32 型変数に変換します:

var a int = 10
var b float32 = float32(a)

2 。基本データ型間の強制型変換

Golang では、基本データ型間の強制型変換は比較的簡単です。一般的な型変換は次のとおりです:

int は float32 または float64 に変換されます。 型:

var a int = 10
var b float32 = float32(a)

float32 または float64 を int 型に変換:

var a float32 = 10.5
var b int = int(a)

文字列を int 型に変換します:

var a string = "100"
var b int, err = strconv.Atoi(a)
if err == nil {

fmt.Println(b)

}

int は文字列型に変換されます:

var a int = 100
var b string = strconv.Itoa (a )

データ型変換を実行すると、精度の低下やデータの切り捨てが発生する可能性があることに注意してください。たとえば、float64 型の 10 進数を int 型に変換すると、データの切り捨てが発生し、結果が不正確になる可能性があります。

3. 構造体とポインターのキャスト

Golang では、構造体とポインター間のキャストには、安全でないパッケージ内のポインター型を使用する必要があります。たとえば、構造体ポインタを int 型に変換します。

import "unsafe"

func main() {

type Example struct {
    x int
    y float32
}

var example Example
example.x = 10
example.y = 10.5
examplePtr := unsafe.Pointer(&example)
exampleInt := uintptr(examplePtr)
fmt.Println(exampleInt)

}

上記の例では, unsafe.Pointer(&example) は、構造体 Example のポインターを unsafe.Pointer 型のポインターに変換し、それから uintptr 型の値に変換します。最終的な出力結果は、構造体 example の開始アドレスです。

unsafe パッケージ内の関数は Go 言語の型チェックと安全メカニズムをバイパスし、プログラム例外を引き起こす可能性があるため、強制的な型変換に unsafe パッケージを使用すると大きなリスクが生じることに注意してください。動作やメモリ リークなどの問題。

4. スライスと配列間の強制型変換

Golang では、スライスと配列間の強制型変換は比較的一般的であり、型変換を直接実行できます。たとえば、int 型の配列を float32 型のスライスに変換します。

var arr [5]int = [5]int{1, 2, 3, 4, 5}
varlice [ ] float32 = ([]float32)(unsafe.Pointer(&arr))

上記の例では、unsafe.Pointer(&arr) を使用して、配列 arr のポインタを unsafe に変換します。 .Pointer 型のポインターを []float32 型のスライスに変換すると、最終的な出力結果は [1 2 3 4 5] になります。

スライスと配列の間のキャスト型変換は非常に一般的な操作ですが、注意して使用する必要があることに注意してください。スライスと配列の基礎となるメモリ構造は異なるため、強制的な型変換はメモリ構造に影響を与え、プログラムのクラッシュやデータ例外を引き起こす可能性があります。

概要

この記事では、基本的なデータ型間の変換、構造体とポインタの変換、スライスと配列の変換など、Golang の強制型変換に関する関連知識を紹介します。なお、実際の開発では強制的な型変換が必要ですが、リスクや問題を回避するために利用シーンや注意事項にも注意する必要があります。

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

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