Maison  >  Article  >  développement back-end  >  Parlons de la conversion entre golang () et .()

Parlons de la conversion entre golang () et .()

PHPz
PHPzoriginal
2023-03-30 10:32:001087parcourir

() et .() conversion en Golang

En Golang, () et .() sont deux conversions de type très courantes. Dans cet article, nous présenterons les scénarios d'utilisation, les règles de conversion et les exemples de codes associés de ces deux types de conversions.

() conversion

Dans Golang, la conversion () est le processus de conversion d'un type non-interface en un type d'interface. Ce processus est accompli en encapsulant une valeur dans un nouveau type d'interface. La syntaxe de conversion () est la suivante :

var i interface{} = somevalue

Dans le code ci-dessus, nous convertissons une valeur somevalue en un type d'interface et la stockons dans une variable i . Dans ce processus, le compilateur Golang créera un nouveau type d'interface pour i. La conversion somevalue转换为一个接口类型,并将其存储在一个变量i中。在这个过程中,Golang编译器会为i创建一个新的接口类型。

()转换可以应用于任何类型,包括自定义类型和内置类型。使用()转换时,我们可以将任何一个非接口类型转换为一个接口类型。这样,我们就可以使用接口的方法来操作这些类型的值。

接下来,我们来看一个示例代码。假设我们定义了一个名为shape的接口类型,这个接口包含一个area()方法,用于计算一个形状的面积。我们还定义了一个名为rect的自定义类型,用于表示一个矩形。我们可以通过()转换将rect类型转换为shape类型,然后使用area()方法计算矩形的面积。示例代码如下:

package main

import "fmt"

type shape interface {
  area() float64
}

type rect struct {
  width, height float64
}

func (r rect) area() float64 {
  return r.width * r.height
}

func main() {
  r := rect{width: 3, height: 4}
  s := shape(r) // 将rect类型转换为shape类型
  fmt.Println("Area of rectangle:", s.area())
}

运行上述代码,我们将会得到如下输出结果:

Area of rectangle: 12

从上述示例代码可以看出,我们通过使用()转换将一个rect类型的值转换为一个shape类型的值,然后使用area()方法计算了这个矩形的面积。

.()转换

在Golang中,.()转换是将一个接口类型转换为一个非接口类型的过程。这个过程是通过将接口类型中的值提取出来并转换为一个新的非接口类型来完成的。.()转换的语法如下所示:

var aType someType = i.(someType)

上述代码中,我们使用.()转换将一个接口类型i转换为非接口类型someType。在这个过程中,Golang会检查接口类型中存储的值的实际类型是否与someType匹配。如果匹配成功,Golang会将接口类型中存储的值提取出来,并将其转换为someType类型存储在变量aType中。如果匹配失败,则程序会在运行时抛出一个panic。

使用.go()转换时,我们必须确保接口类型中存储的值的实际类型与我们要转换成的非接口类型是匹配的,否则程序会在运行时抛出一个panic。

接下来,我们来看一个示例代码。假设我们有一个名为shape的接口类型,这个接口包含一个area()方法,用于计算一个形状的面积。我们还定义了一个名为rect的自定义类型,用于表示一个矩形。我们可以通过.go()转换将shape类型转换为rect类型,并计算矩形的面积。示例代码如下:

package main

import "fmt"

type shape interface {
  area() float64
}

type rect struct {
  width, height float64
}

func (r rect) area() float64 {
  return r.width * r.height
}

func main() {
  s := shape(rect{width: 3, height: 4}) // 将rect类型转换为shape类型
  r := s.(rect)                         // 将shape类型转换为rect类型
  fmt.Println("Area of rectangle:", r.area())
}

运行上述代码,我们将会得到如下输出结果:

Area of rectangle: 12

从上述示例代码可以看出,我们通过使用()转换将一个rect类型的值转换为一个shape类型的值,并使用.go()转换将其转换回rect类型的值,然后使用area()

() peut être appliquée à n’importe quel type, y compris les types personnalisés et les types intégrés. Lors de l'utilisation de la conversion (), nous pouvons convertir n'importe quel type non-interface en type d'interface. De cette manière, nous pouvons utiliser les méthodes de l’interface pour opérer sur ces types de valeurs.

Ensuite, regardons un exemple de code. Supposons que nous définissions un type d'interface nommé shape. Cette interface contient une méthode area() pour calculer l'aire d'une forme. Nous définissons également un type personnalisé appelé rect pour représenter un rectangle. Nous pouvons convertir le type rect en type shape via la conversion (), puis utiliser la méthode area() pour calculer l'aire de ​le rectangle. L'exemple de code est le suivant :

rrreee

Exécutez le code ci-dessus, nous obtiendrons le résultat suivant : 🎜rrreee🎜Comme le montre l'exemple de code ci-dessus, nous convertissons une valeur de type rect en utilisant () la conversion est une valeur de type shape, puis utilise la méthode area() pour calculer l'aire du rectangle. 🎜🎜.() conversion🎜🎜Dans Golang, la conversion .() est le processus de conversion d'un type d'interface en un type non-interface. Ce processus est accompli en extrayant la valeur du type d'interface et en la convertissant en un nouveau type sans interface. La syntaxe de la conversion .() est la suivante : 🎜rrreee🎜Dans le code ci-dessus, nous utilisons la conversion .() pour convertir un type d'interface i en un non -type d'interface unType. Au cours de ce processus, Golang vérifiera si le type réel de la valeur stockée dans le type d'interface correspond à someType. Si la correspondance réussit, Golang extraira la valeur stockée dans le type d'interface et la convertira en type someType et la stockera dans la variable aType. Si la correspondance échoue, le programme déclenchera une panique au moment de l'exécution. 🎜🎜Lors de l'utilisation de la conversion .go(), nous devons nous assurer que le type réel de la valeur stockée dans le type d'interface correspond au type non-interface vers lequel nous voulons convertir, sinon le programme provoquera une panique au moment de l'exécution. 🎜🎜Ensuite, regardons un exemple de code. Supposons que nous ayons un type d'interface nommé shape. Cette interface contient une méthode area() pour calculer l'aire d'une forme. Nous définissons également un type personnalisé appelé rect pour représenter un rectangle. Nous pouvons convertir le type shape en type rect via la conversion .go() et calculer l'aire du rectangle. L'exemple de code est le suivant : 🎜rrreee🎜Exécutez le code ci-dessus, nous obtiendrons le résultat suivant : 🎜rrreee🎜Comme le montre l'exemple de code ci-dessus, nous convertissons une valeur de type rect en utilisant () conversion Soyez une valeur de type shape et utilisez la conversion .go() pour la reconvertir en une valeur de type rect, puis utilisez la fonction area() Méthode L'aire de ce rectangle est calculée. 🎜🎜Résumé🎜🎜Dans cet article, nous avons présenté les conversions () et .() dans Golang, y compris leurs scénarios d'utilisation, les règles de conversion et les exemples de codes associés. Ces deux conversions de type sont des conversions de type très courantes dans Golang, et tout développeur Golang devrait en avoir une compréhension approfondie. 🎜

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:Voulez-vous passer à Golang ?Article suivant:Voulez-vous passer à Golang ?