Maison > développement back-end > Golang > Qu'est-ce que l'affirmation Golang ?

Qu'est-ce que l'affirmation Golang ?

爱喝马黛茶的安东尼
Libérer: 2019-12-10 09:37:23
original
3192 Les gens l'ont consulté

Qu'est-ce que l'affirmation Golang ?

Il existe une grammaire dans le langage Go qui permet de déterminer directement s'il s'agit d'une variable de ce type : valeur, ok = élément.(T), où valeur est la valeur du variable, et ok est un type booléen, element est la variable d'interface et T est le type affirmé.

Si l'élément stocke une valeur de type T, alors ok renvoie vrai, sinon il renvoie faux.

package main
 
import (
  "fmt"
)
 
type Order struct {
  ordId   int
  customerId int
  callback func()
}
 
func main() {
  var i interface{}
  i = Order{
    ordId:   456,
    customerId: 56,
  }
  value, ok := i.(Order)
  if !ok {
    fmt.Println("It's not ok for type Order")
    return
  }
  fmt.Println("The value is ", value)
}
Copier après la connexion

Sortie :

The value is  {456 56 <nil>}
Copier après la connexion

Il est également courant d'utiliser switch pour affirmer :

package main
 
import (
  "fmt"
)
 
type Order struct {
  ordId   int
  customerId int
  callback func()
}
 
func main() {
  var i interface{}
  i = Order{
    ordId:   456,
    customerId: 56,
  }
  switch value := i.(type) {
    case int:
      fmt.Printf("It is an int and its value is %d\n", value)
    case string:
      fmt.Printf("It is a string and its value is %s\n", value)
    case Order:
      fmt.Printf("It is a Order and its value is %v\n", value)
    default:
      fmt.Println("It is of a different type")
    }
}
Copier après la connexion

Sortie :

It is a Order and its value is {456 56 <nil>}
Copier après la connexion

Le langage golang fournit la fonction d'assertion. Tous les programmes de Golang implémentent l'interface{}, ce qui signifie que tous les types tels que les types string, int, int64 et même les types de structure personnalisés ont l'interface{}. Cette approche est similaire à celle de Java. Le type Object est relativement similaire. Ensuite, lorsqu'une donnée est transmise via func funcName(interface{}), cela signifie que le paramètre est automatiquement converti en type d'interface{}.

Par exemple, le code suivant :

func funcName(a interface{}) string {
     return string(a)
}
Copier après la connexion

Le compilateur retournera :

cannot convert a (type interface{}) to type string: need type assertion
Copier après la connexion

À ce stade, cela signifie que l'ensemble du processus de conversion nécessite une assertion de type. Les assertions de type ont les formes suivantes :

L'assertion directe utilise

var a interface{}
fmt.Println("Where are you,Jonny?", a.(string))
Copier après la connexion

, mais si l'assertion échoue, la panique se produira généralement. Ainsi, afin d’éviter la panique, nous devons porter certains jugements avant d’affirmer.

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

Si l'assertion échoue, la valeur de ok sera fausse, mais si l'assertion réussit, la valeur de ok sera vraie et la valeur obtiendra la valeur correcte attendue. Exemple :

value, ok := a.(string)
if !ok {
    fmt.Println("It&#39;s not ok for type string")
    return
}
fmt.Println("The value is ", value)
Copier après la connexion

De plus, vous pouvez également utiliser l'instruction switch pour porter un jugement :

var t interface{}
t = functionOfSomeType()
switch t := t.(type) {
default:
    fmt.Printf("unexpected type %T", t)       // %T prints whatever type t has
case bool:
    fmt.Printf("boolean %t\n", t)             // t has type bool
case int:
    fmt.Printf("integer %d\n", t)             // t has type int
case *bool:
    fmt.Printf("pointer to boolean %t\n", *t) // t has type *bool
case *int:
    fmt.Printf("pointer to integer %d\n", *t) // t has type *int
}
Copier après la connexion

De plus, ajoutez quelques conseils pour la programmation en langage Go :

( 1) Si cela ne répond pas aux exigences, vous pouvez revenir aussi vite que possible et réduire l'utilisation des instructions else, qui peuvent être plus intuitives.

(2) Lors de la conversion du type, s'il s'agit d'une chaîne, il n'est pas nécessaire d'affirmer. Utilisez la fonction fmt.Sprint() pour obtenir l'effet souhaité.

(3) Les variables peuvent être définies et déclarées en groupes, tels que :

var (
   a string
   b int
   c int64
   ...
)
import (
    "fmt"
    "strings"
    "net/http"
   ...
)
Copier après la connexion

(4) La logique de la fonction est relativement complexe et une partie de la logique peut être encapsulée dans une fonction pour améliorer la lisibilité. .

(5) Les fonctions qui utilisent le package net/http et le package net/url peuvent avoir une fonction d'encodage d'URL, vous devez donc y faire attention.

Le site Web PHP chinois propose un grand nombre de tutoriels d'introduction à Golang gratuits, tout le monde est invité à apprendre !

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal