Maison> développement back-end> Golang> le corps du texte

Comment l'assertion de type est-elle implémentée dans les fonctions Golang ?

WBOY
Libérer: 2024-06-06 10:26:34
original
966 Les gens l'ont consulté

L'assertion de type est implémentée via les étapes suivantes : Le compilateur génère une structure runtime.type contenant des informations de type et des tables de méthodes. Lors de l'affirmation de type d'une valeur, le compilateur vérifie si sa structure runtime.type correspond au type cible. Lorsque la correspondance réussit, l'assertion de type réussit, ok est vrai et la valeur est extraite. Lorsque la correspondance échoue, l’assertion de type échoue, ok est faux et la valeur est définie sur zéro.

Comment lassertion de type est-elle implémentée dans les fonctions Golang ?

Comment les assertions de type sont-elles implémentées dans les fonctions Go ?

Les assertions de type nous permettent de vérifier si une valeur appartient à un certain type et d'extraire sa valeur. Il est implémenté à l'aide des mots-clésinterface{}ettype.interface{}type关键字来实现。

语法

类型断言的语法如下:

value, ok := value.(type)
Copier après la connexion

其中:

  • value是要进行类型断言的值。
  • type是要检查的类型。
  • ok为布尔值,告诉我们类型断言是否成功。当oktrue时,value属于指定类型,我们可以在value中访问它的实际值。当okfalse时,类型断言失败,valuenil

实现

在底层,类型断言通过以下步骤实现:

  1. 编译器会生成一个runtime.type结构体,它包含类型的信息和方法表。
  2. 当对一个值进行类型断言时,编译器会检查值的runtime.type结构体是否与目标类型的runtime.type结构体匹配。
  3. 如果匹配,则类型断言成功,oktrue,并将值的实际值存储到value中。
  4. 如果不匹配,则类型断言失败,okfalse,并将value设置为nil

实战案例

以下是使用类型断言的实际示例:

package main import "fmt" func main() { var value interface{} = 42 if i, ok := value.(int); ok { fmt.Println("Value is of type int and its value is:", i) } else { fmt.Println("Value is not of type int") } }
Copier après la connexion

结果:

Value is of type int and its value is: 42
Copier après la connexion

注意:

  • 类型断言只能用于检查具体类型,不能用于检查接口类型。
  • 如果类型断言失败,value将被设置为nil,即使原始值不是nil
SyntaxeLa syntaxe de l'assertion de type est la suivante : rrreeeoù :
  • valueest la valeur à déclarer.
  • typeest le type à vérifier.
  • okest une valeur booléenne, nous indiquant si l'assertion de type réussit. Lorsqueokesttrue,valueappartient au type spécifié et nous pouvons accéder à sa valeur réelle dansvalue. Lorsqueokestfalse, l'assertion de type échoue etvalueestnil. ImplémentationSous le capot, l'assertion de type est implémentée à travers les étapes suivantes :
    1. Le compilateur générera une structureruntime.type, qui contient des informations de type et les méthodes font surface.
    2. Lors d'une assertion de type sur une valeur, le compilateur vérifie si la structureruntime.typede la valeur correspond à la structureruntime.typedu type cible.
    3. Si elle correspond, l'assertion de type réussit,okesttrueet la valeur réelle de la valeur est stockée dansvalue.
    4. S'il n'y a pas de correspondance, l'assertion de type échoue,okestfalseetvalueest défini surnil >.
    Cas pratiqueCe qui suit est un exemple pratique d'utilisation des assertions de type : rrreeeRésultat : rrreeeRemarque :
    • Les assertions de type ne peuvent être utilisées que pour vérifier types concrets, ne peut pas être utilisé pour vérifier le type d'interface.
    • Si une assertion de type échoue,valuesera définie surnil, même si la valeur d'origine n'était pasnil.

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!