Golang 3 : Les types

in #utopian-io7 years ago

Types

introduction

image.png

This article is about Types that are available in go, their characteristics and some tools to manipulate them.

Les types suivants sont les types disponibles dans go:

  • bool
  • Types numériques:
    • int8, int16, int32, int64, int
    • uint8, uint16, uint32, uint64, uint
    • float32, float64
    • complex64, complex128
    • byte
    • rune
  • string

Note:

Toutes les exécutions se feront en playground.

Bool

Un type bool représente un booléen qui est ou bien true(vrai) ou bien false(faux).

package main

import "fmt"

func main() {  
    a := true
    b := false
    fmt.Println("a:", a, "b:", b)
    c := a && b
    fmt.Println("c:", c)
    d := a || b
    fmt.Println("d:", d)
}

Dans le programme ci-dessus, on a attribué true à a et false à b.

On a attribué à c a && b. L'opérateur && retourne true si seulement et si a et b sont tous les deux true. Dans ce cas alors c est false.

L'opérateur || retourne true quand l'une des valeurs a ou b est true. Dans ce cas true est attribué à d car a est true. l'exécution du programme donnerait ceci:

a: true b: false  
c: false  
d: true

Les entiers signés

nt8: représente des entiers signés 8 bit
size: 8 bits
range: -128 à 127

int16: représente des entiers signés 16 bit
size: 16 bits
range: -32768 à 32767 entiers signés

int32: représente des entiers signés 32 bit
size: 32 bits
range: -2147483648 à 2147483647

int64: représente des entiers signés 64 bit
size: 64 bits
range: -9223372036854775808 à 9223372036854775807

int: représente des entiers 32 ou 64 bit selon la plateforme sous-jacente. Vous devez généralement utiliser int pour représenter des entiers à moins que vous avez besoin d'utiliser un entier de taille spécifique.

size: 32 bits dans un système de 32 bit et 64 bits dans un système de 64 bit.

range: -2147483648 à 2147483647 dans un système de 32 bit et -9223372036854775808 à 9223372036854775807 dans un système de 64 bit.

package main

import "fmt"

func main() {  
    var a int = 50
    b := 70
    fmt.Println("valeur de a est", a, "et b est", b)
}

le résulat de l'exécution est valeur de a est 50 et b est 70

On va essayer de vérifier la définition ci-dessus relative au type en utilisant %T . Go a un package unsafe qui une fonction Sizeof qui retourne en bit la taille de la variable passée à la fonction. Ce package doit être utilisé avec prudence car le code peut avoir des problèmes de portabilité.

Le programme suivant donne le type et la taille des variables a et b. %T est le déterminant de format pour écrire le type et %d est utilisé pour déterminer la taille.

package main

import (  
    "fmt"
    "unsafe"
)

func main() {  
    var a int = 50
    b := 70
    fmt.Println("valeur de a est", a, "et b est", b)
    fmt.Printf("type de a est %T, taille de a est %d", a, unsafe.Sizeof(a)) //type et taille de a
    fmt.Printf("\ntype de b est %T, taille de b est %d", b, unsafe.Sizeof(b)) //taille et type de b
}

l'exécution du programme donnerait ceci:

valeur de a est 50 et b est 70  
type de a est int, taille de a est 4  
type de b est int, taille de b est 4  

On peut déduire que le système utilisé est de 32 bit(4bits pour un entier).

Les entiers non-signés

uint8: représente des entiers non-signés 8 bit
size: 8 bits
range: 0 à 255

uint16: représente des entiers non-signés 16 bit
size: 16 bits
range: 0 à 65535

uint32: représente des entiers non-signés 32 bit
size: 32 bits
range: 0 à 4294967295

uint64: représente des entiers non-signés 64 bit
size: 64 bits
range: 0 à 18446744073709551615

uint : représente des entiers non-signés 32 ou 64 bits selon la plateforme sous-jacente.

size : 32 bits dans les systèmes de 32 bit et 64 bits dans les systèmes de 64 bit .

range : 0 à 4294967295 dans les systèmes de 32 bit et 0 à 18446744073709551615 dans les systèmes de 64 bit.

Les nombres réels

float 32: nombres réels 32 bit

float 64: nombre réels 64 bit

Voici un exemple qui illustre le type entier et le type float:

package main

import (  
    "fmt"
)

func main() {  
    a, b := 5.67, 8.97
    fmt.Printf("type de a %T b %T\n", a, b)
    som := a + b
    diff := a - b
    fmt.Println("som", som, "diff", diff)

    no1, no2 := 96, 79
    fmt.Println("som", no1+no2, "diff", no1-no2)
}

Le type des variables a et b est déduit des valeurs attribuées aux variables. Dans ce cas, a et b sont des float64.

le résultat de l'exécution du programme ci-dessus est:

type de a float64 b float64  
sum 14.64 diff -3.300000000000000  
som 175 diff 17 

Le type complex

complex64: les nombres complexes dont la partie réelle et imaginaire est un réel float32

complex128: les nombres complexes dont la partie réelle et imaginaire est un réel float64

La fonction intrinsèque complex est utilisée pour construire un nombre complexe avec une partie imaginaire et une partie réelle.

func complex(r, i FloatType) ComplexType

Cette fonction prend la partie réelle et la partie imaginaire comme paramètres et retourne le type complex, les deux parties doivent être du même type. Si les deux parties sont des float32, la fonction retourne une valeur complexe de type complex64, s'ils sont des float64, la fonction retourne une valeur complexe de type complex128.

Les nombres complexes peuvent aussi être créés en utilisant le syntaxe concis suivant:

c : 7 + 8i

Voici un exemple pour bien comprendre les nombres complexes:

package main

import (  
    "fmt"
)

func main() {  
    c1 := complex(4, 7)
    c2 := 9 + 6i
    cadd := c1 + c2
    fmt.Println("som:", cadd)
    cmul := c1 * c2
    fmt.Println("produit:", cmul)
}

le résultat de l'exécution du programme est comme suivant:

som: (13+13i)
produit: (-6 + 87i)

Autres types numériques

byte est un allias de uint8

rune est un allias de int32

Le type string

String est une collection de bits dans golang. On suppose pour l'instant que c'est une collection de caractères.

Exemple:

package main

import (  
    "fmt"
)

func main() {  
    first := "Émilie"
    last := "Poirot"
    name := first +" "+ last
    fmt.Println("Mon nom est",name)
}

On peut cancaténer les strings en utilisant l'opérateur +.

Le programme ci-dessus affichera comme sortie Mon nom est Émilie Poirot.

La conversion

Go est très strict en ce qui concerne le tapage explicite. Il n'y a pas de conversion automatique.

Examinez cet exemple pour bien comprendre ce qu'on vient de dire:

package main

import (  
    "fmt"
)

func main() {  
    i := 74      //int
    j := 77.8    //float64
    sum := i + j //int + float64 n'est pas permise
    fmt.Println(sum)
}

Dans le code ci-dessus, on était entrain d'essayer d'ajouter deux types différents ce qui n'est pas permis en go. Quand vous allez exécuter ce programme, vous aurez comme sortie:main.go:10: invalid operation: i + j (mismatched types int and float64)

Pour résoudre ce problème, les deux variables doivent être du même type. On doit alors recourir à la conversion . W(a) est le syntaxe pour convertir une valeur a de type W.

exemple:

package main

import (  
    "fmt"
)

func main() {  
    i := 74      //int
    j := 77.8    //float64
    sum := i + int(j) //int + float64 n'est pas permise
    fmt.Println(sum)
}

Quand vous allez exécuter le programme, vous allez avoir 151 comme sortie.

Il est de même pour l'affectation (la variable et la valeur affectée doivent être du même type)

Exemple:

package main

import (  
    "fmt"
)

func main() {  
    i := 12
    var j float64 = float64(i) //cette déclaration ne va pas marcher sans une conversion explicite  
    fmt.Println("j", j)
}

La variable i est converti à float64 , puis affectée à la variable j, si vous négligez la conversion, le compilateur signalera une erreur.



Posted on Utopian.io - Rewarding Open Source Contributors

Sort:  

Thank you for the contribution. It has been approved.

You can contact us on Discord.
[utopian-moderator]

Hey @raptorjesus I am @utopian-io. I have just upvoted you!

Achievements

  • You have less than 500 followers. Just gave you a gift to help you succeed!
  • Seems like you contribute quite often. AMAZING!

Suggestions

  • Contribute more often to get higher and higher rewards. I wish to see you often!
  • Work on your followers to increase the votes/rewards. I follow what humans do and my vote is mainly based on that. Good luck!

Get Noticed!

  • Did you know project owners can manually vote with their own voting power or by voting power delegated to their projects? Ask the project owner to review your contributions!

Community-Driven Witness!

I am the first and only Steem Community-Driven Witness. Participate on Discord. Lets GROW TOGETHER!

mooncryption-utopian-witness-gif

Up-vote this comment to grow my power and help Open Source contributions like this one. Want to chat? Join me on Discord https://discord.gg/Pc8HG9x