Link Search Menu Expand Document

Caratteristiche del linguaggio

Di seguito evindenziamo le caratteristiche principale di questo linguaggio:

  • linguaggio fortemente tipizzato
  • garbage collection per una gestione migliore della memoria
  • programmazione concorrente semplice
  • uso dei package per le dipendenze
  • i commenti come nel linguaggio C o JAVA
  • poche parole chiave da ricordare
  • uso dei cicli semplificato

Limitate Parole chiave

  • break
  • default
  • func
  • interface
  • select
  • case
  • defer
  • go
  • map
  • struct
  • chan
  • else
  • goto
  • package
  • switch
  • const
  • fallthrough
  • if
  • range
  • type
  • continue
  • for
  • import
  • return
  • var

Comandi di Go da command line

  • go env : Visualizza le variabili d’ambiente attualmente impostate
  • godoc tool tour : Fa fare un giro nella documentazione di golang
  • go help : Visualizza l’help dei comandi
  • go run : Esecuzione del codice a runtime

Ci sono altri comandi ma verranno presi in considerazione man mano che eseguiamo dei progetti …

Costrutti condizionali e cicli

if ([condizione]) {
    // operazioni
} else {
    altra operazione
}
    switch ([espressione]){
        case [valore1]:
            //azione1
        case [valore2]:
            //azione2
        default:
            //azione default
    }

    for [var]:=[iniziale]; [condizione]; [incremento]{
        //azioni
    }
    //esempio:
    for i:=1; i<10; i+=1{
        //azione
    }
    
    //esempio:
    j:=1
    for j<10; {
        //azione
        j++
    }


Scrivere una funzione


func [nome funzione]([param][tipo],...) [tipo ritorno]{
    //operazioni
}

func sum( parametro1 int, parametro2 int) int {
    // operazioni

}

Gestione dei package

Per creare una propria libreria per esempio creo un file mytools.go :

package mytools

func funzione1(){

}
func funzione2(){

}
...
...
func funzioneN(){

}

Adesso vado nel mio main.go :

package main 
import {
    "mytools"
    "fmt"
}

func main(){
    mytools.funzione1()
}

Più in generale possiamo dire che:


package main 
import {
    "path/to/mytools"
    "fmt"

}
...

Nel comando import possiamo inserire il path assoluto per raggiungere il nostro package oppure se mettiamo solo il nome del pacchetto, Go cerca usando il path di default.

Nei vari progetti che poi seguiranno vedremo anche altre situazioni particolari.

Vediamo i tipi

  • int: intero
    • int8 : 8 bit => -128 a +128
    • int16 : 16 bit => -32.768 a 32.767
    • int32 : 32 bit => -2.147.483.648 a 2.147.483.647
    • int64 : 64 bit => circa -9 X 10^18 a circa 9 X 10^18
  • uint: interi senza segno a valore doppio rispetto ai precedenti perchè partono da 0
    • uint8 : 0-256
    • uint16: 0 a 65.535
    • uint32: 4.294.967.295
    • uint64: 18 X 10^18
  • float32 e float64 : valori in virgola mobile
  • boolean: true o false
  • string

Strutture di memoria

  • Array:
          var matrix[10] string 
          matrix[0] = "mela"
          matrix[1] = "pera"
    
          //oppure 
          var matrix = [2]string{"mela","pera"}
    
    
  • Slice: sono degli “array” dinamici
      var matrix []int 
      // uno slice è caratterizzato da lunghezza e capacità in questo caso entrambe nulle
      // lunghezza = 0
      // capacità = 0
    
      // Se invece definisco lo slice come segue: 
      matrix = make([]int,8,3)
      // in questo caso lo slice è inizializzato con : 
      // lunghezza = 8 
      // capacità = 3
    
      // inserimento di valori dentro uno slice:
      matrix= append(matrix,5) // inserisce il valore 5 
    
      // per estrarre elementi o porzioni di elementi:
      matrix := []int{10,20,30,40}
      estratti := matrix[2:3]
      // slice[start:end]
    
    
  • Map: sono come i dizionari di Python, Hash di Ruby e HashMap di Java
      // map[tipo chiave]tipo-valore
    
      //esempio: 
      anagrafica := make(map[string]string)
      // la chiave di tipo stringa 
      // il valore di tipo string 
        
      // esempio: 
      status := make(map[int]string)
      // status chiave di interi
      // status valori di stringa 
    
      anagrafica["nome"] = "Tim"
      anagrafica["cognome] = "Cook"
    
      status[0] = "open"
      status[1] = "close"
      status[2] = "cancel"
    
      // estrarre i valori: 
      status_attuale := status[0]
    
    
  • Struct : le strutture sono come quelle che si trovano nel C

      // definisco una struttura dati :
      type Persona struct {
          id int 
          nome string 
          cognome string 
          age int 
            
      }
    
      // usare la nuova struttura dati 
    
      impiegato1 := Persona{1,"Mario","Rossi",43}
    
      // Per accedere alla struttura
    
      fmt.Println("Nome impiegato:" + impiegato1.nome)
    
      // altro modo di definire una struct 
    
      impiegato2 = Persona{cognome:"Hermano",id:2,nome:"Felipe"}
      fmt.Println("Nome impiegato2:" + impiegato2.nome)
      // l'ordine di come si definiscono i campi non è importante per l'impiegato2    
    
    

Copyright © 2023 RICSystem - partner DIAGO SRL -