Maison >développement back-end >Golang >Introduction détaillée à la conversion de type dans Golang

Introduction détaillée à la conversion de type dans Golang

PHPz
PHPzoriginal
2023-04-25 16:19:27984parcourir

Golang est un langage de programmation typé statiquement et la conversion de type joue un rôle important dans la programmation quotidienne. Dans Golang, la conversion de type peut convertir une valeur d'un type en un autre type. Cet article présentera en détail la conversion de type dans Golang.

  1. Conversion de type de base

Dans Golang, la conversion de type automatique et la conversion de type forcée peuvent être effectuées. La conversion de type automatique signifie que le compilateur convertit automatiquement un type en un autre type lorsque cela est nécessaire. Par exemple, lors de l'attribution d'une valeur de type entier à une variable de type virgule flottante, la conversion de type est effectuée automatiquement. Un transtypage se produit lorsque le programmeur convertit explicitement une valeur d'un type à un autre. Dans Golang, la conversion de type forcée s'écrit comme suit : type cible (valeur convertie).

Voici quelques exemples de conversions de type de base :

var i int = 10
var f float64 = float64(i)   // int to float64
var u uint = uint(f)         // float64 to uint
var s string = string(i)     // int to string
var b []byte = []byte(s)     // string to []byte
var r rune = rune(i)         // int to rune, represents a Unicode code point
  1. Conversion de type d'interface

Dans Golang, l'assertion de type d'interface fait référence à la conversion de la valeur d'un type d'interface en la valeur d'un autre type d'interface. Cependant, s'il n'est pas sûr de convertir l'un des types d'interface en un autre, le compilateur ne parviendra pas à compiler. Par conséquent, lors de la conversion du type d'interface, le type initial peut être un sur-ensemble du type cible, mais il faut s'assurer que le type cible converti doit être un sous-ensemble du type d'origine.

Ce qui suit est un exemple de conversion de type d'interface :

package main
 
import "fmt"
 
type Animal interface {
    Speak() string
}
 
type Cat struct{}
 
func (c Cat) Speak() string {
    return "cat"
}
 
type Dog struct{}
 
func (d Dog) Speak() string {
    return "dog"
}
 
func main() {
    animals := []Animal{Cat{}, Dog{}, Cat{}, Dog{}}
    for _, animal := range animals {
        fmt.Println(animal.Speak())
        if v, ok := animal.(Dog); ok {
            fmt.Println(v, ok)
        }
    }
}
  1. Conversion de type personnalisé

Dans Golang, en plus de la conversion de type de base et de type d'interface, une conversion de type personnalisée peut également être effectuée. Une conversion qui définit un nouveau type est très utile car elle convertit le nouveau type en ancien type et vice versa. Si nous ne le définissions pas comme type en utilisant NewType, nous ne pourrions pas utiliser la fonction de conversion.

Ce qui suit est un exemple de conversion de type personnalisé :

type Celsius float64
type Fahrenheit float64

const (
    AbsoluteZeroC Celsius = -273.15
    FreezingC     Celsius = 0
    BoilingC      Celsius = 100
)

func CToF(c Celsius) Fahrenheit { return Fahrenheit(c*9/5 + 32) }
func FToC(f Fahrenheit) Celsius { return Celsius((f - 32) * 5 / 9) }

func main() {
    fmt.Printf("%g\n", BoilingC-FreezingC) // "100" °C
    boilingF := CToF(BoilingC)
    fmt.Printf("%g\n", boilingF-CToF(FreezingC)) // "180" °F
}

Résumé

Cet article présente la conversion de type dans Golang, y compris la conversion des types de base, des types d'interface et des types personnalisés. Lors de la conversion de type, nous devons nous conformer aux spécifications de sécurité de la conversion de type pour garantir que notre programme est correct. La conversion de type est nécessaire dans de nombreux scénarios. Une bonne conception de conversion de type peut améliorer les performances du programme et est particulièrement importante dans la programmation réelle.

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