casting golang

王林
王林original
2023-05-10 22:39:081559parcourir

Avec la large application de Golang dans le domaine Internet, il existe une demande croissante de conversion de type forcée Golang. La conversion est la conversion d'une valeur d'un type de données en une valeur d'un autre type de données, et la valeur convertie peut être tronquée ou perdre en précision. Cet article présentera les connaissances pertinentes sur la conversion de type forcée Golang sous les quatre aspects suivants.

1. Syntaxe de conversion de type forcée

Dans Golang, pour différents types de données, nous pouvons les convertir en d'autres types grâce à une conversion de type forcée. La syntaxe est la suivante :

T(expression)

Parmi eux, T représente le type cible et expression représente l'expression qui doit être convertie.

Par exemple, convertissez une variable de type int en variable de type float32 :

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

2. Conversion de type forcée entre les types de données de base

Dans Golang, la conversion de type forcée entre les types de données de base est relativement simple : #🎜🎜 ##🎜🎜. #int conversion en type float32 ou float64 :

var a int = 10

var b float32 = float32(a)

float32 ou float64 conversion Pour le type int :

var a float32 = 10.5

var b int = int(a)

string est converti en type int :
#🎜🎜 #var a string = "100"

var b int, err = strconv.Atoi(a)

if err == nil {

fmt.Println(b)

}
#🎜 🎜#int est converti en type de chaîne :

var a int = 100

var b string = strconv.Itoa(a)

Il convient de noter que lors de la conversion types de données, une perte de précision ou une troncature des données peuvent survenir. Par exemple, lors de la conversion d'un type décimal float64 en type int, une troncature des données peut se produire, entraînant des résultats inexacts.

3. Casting de structures et de pointeurs

Dans Golang, le casting entre structures et pointeurs nécessite l'utilisation de types de pointeurs dans le package non sécurisé. Par exemple, convertissez un pointeur de structure en type 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)

}#🎜🎜 #

Dans l'exemple ci-dessus, unsafe.Pointer(&example) convertit le pointeur de la structure Exemple en un pointeur de type unsafe.Pointer, puis le convertit en une valeur de type uintptr, et enfin le résultat de sortie est la structure exemple l'adresse de départ.

Il convient de noter que l'utilisation du package unsafe pour la diffusion entraînera de grands risques, car les fonctions du package unsafe contourneront la vérification de type et le mécanisme de sécurité du langage Go, ce qui peut amener le programme à Des problèmes tels qu'un comportement anormal ou des fuites de mémoire se produisent.

4. Conversion de type forcée entre tranches et tableaux

Dans Golang, la conversion de type forcée entre tranches et tableaux est relativement courante et la conversion de type peut être effectuée directement. Par exemple, convertissez un tableau de type int en une tranche de type float32 :

var arr [5]int = [5]int{1, 2, 3, 4, 5}

var slice []float32 =

(

[]float32)(unsafe.Pointer(&arr))

Dans l'exemple ci-dessus, utilisez unsafe.Pointer(&arr) pour convertir le array arr Le pointeur est converti en un pointeur de type unsafe.Pointer, puis converti en une tranche de type []float32, et le résultat final est [1 2 3 4 5].


Il convient de noter que la conversion de type cast entre tranches et tableaux est une opération très courante, mais elle doit également être utilisée avec prudence. Étant donné que les structures de mémoire sous-jacentes des tranches et des tableaux sont différentes, la conversion de type forcée peut avoir un impact sur la structure de la mémoire, provoquant des pannes de programme ou des exceptions de données. Résumé

Cet article présente les connaissances pertinentes sur la conversion de type forcée Golang, y compris la conversion entre les types de données de base, la conversion de structures et de pointeurs, la conversion de tranches et de tableaux, etc. . Il convient de noter que bien que la conversion de type forcée soit nécessaire dans le développement réel, vous devez également prêter attention aux scénarios d'utilisation et aux précautions pour éviter d'éventuels risques et problèmes.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Article précédent:mois golang en numéroArticle suivant:mois golang en numéro