Go, noto anche come Golang, è un linguaggio di programmazione open source sviluppato da Google. È stato creato da Robert Griesemer, Rob Pike e Ken Thompson nel 2007 e il suo sviluppo è stato reso pubblico nel 2009. Go è progettato per essere efficiente, conciso, veloce e altamente scalabile, con un’enfasi sulla semplicità e la produttività degli sviluppatori.
Go ha anche un altro nome, Golang (dove il nome significava Go Language, “linguaggio vai“), ma il suo nome proprio è Go, a causa del suo precedente nome di dominio, golang.org, ma il suo nome proprio è Go.
Dettagli sul funzionamento di Go
Go è un linguaggio di programmazione compilato e tipizzato in modo statico, progettato interamente dallo staff di programmatori di Google. Go è stato creato da Robert Griesemer, Rob Pike e Ken Thompson, che attualmente lavorano al progetto. Si tratta di un linguaggio sintatticamente molto simile a C, ma con una gestione migliorata della sicurezza sulla memoria, meccanismi di garbage collection, tipizzazione strutturata e programmazione concorrente in stile linguaggio CSP. Ci sono due implementazioni principali disponibili, una hosted by Google e l’altra da lanciare in autonomia: il motore software di Go è infatti disponibile come software open source.
Sintassi di Go
La sintassi di Go include aspetti tipici del linguaggio C, e non prevede l’uso di punti e virgola per delimitare le istruzioni (come in Python). àˆ stato introdotto un particolare operatore combinato di dichiarazione/inizializzazione che consente al programmatore di scrivere i := 2 o s := “Ciao Mondo!”, senza specificare i tipi, esattamente come avverrebbe in PHP.
Go aggiunge la possibilità di utilizare letterali per l’inizializzazione dei parametri struct in base al nome e per l’inizializzazione di map e tipi complessi o composti. In alternativa al ciclo for a tre istruzioni di C, le espressioni di intervallo di Go consentono un’iterazione concisa su array, sezioni, stringhe, mappe e canali.
Go offre inoltre una serie di tipi incorporati, inclusi quelli numerici (ad esempio byte, int64, float32), Booleani e stringhe di caratteri (stringa). Le stringhe sono immutabili, la codifica e decodifica è nativamente UTF-8. I tipi di record personalizzati possono essere definiti con la parola chiave struct, come abbiamo appena accennato
Per ogni tipo T e per ogni costante intera non negativa n, esiste un tipo di array indicato con [n]T; array di lunghezze diverse sono quindi di tipi diversi. Gli array dinamici sono disponibili come “slice”, indicati con []T per alcuni tipi T. Questi hanno una lunghezza e una capacità che specificano quando è necessario allocare nuova memoria per espandere l’array.
I puntatori sono disponibili per tutti i tipi e il tipo da puntatore a T è indicato con *T. L’assunzione di indirizzi e l’indirizzamento indiretto utilizzano gli operatori & e *, come in C, o avvengono implicitamente tramite la chiamata al metodo o la sintassi di accesso all’attributo. Non è consentito effettuare aritmetica del puntatore, se non tramite lo speciale tipo di variabile unsafe.Pointer nella libreria standard di Go.
Cosa si può fare in Go
Ecco alcuni punti chiave su Go:
- Sintassi chiara e concisa: Go è progettato con una sintassi semplice e leggibile che facilita la scrittura e la comprensione del codice. Ha un numero limitato di parole chiave e una struttura di controllo dei flussi di programma chiara e intuitiva.
- Concorrenza e gestione della concorrenza: Go offre un supporto integrato per la programmazione concorrente attraverso le goroutine e i canali. Le goroutine sono thread leggeri che consentono agli sviluppatori di scrivere codice altamente concorrente in modo semplice ed efficiente.
- Rapido e performante: Go è noto per le sue prestazioni elevate e la sua efficienza nell’utilizzo delle risorse. È particolarmente adatto per applicazioni che richiedono elevata concorrenza o elaborazione parallela.
- Tipizzazione statica e dinamica: Go è un linguaggio tipizzato staticamente, il che significa che le variabili devono essere dichiarate con un tipo specifico e il tipo delle variabili è verificato a tempo di compilazione. Tuttavia, Go offre anche la flessibilità della tipizzazione dinamica attraverso l’uso di interfacce.
- Ampia libreria standard: Go include una libreria standard ricca di funzionalità per gestire una vasta gamma di compiti, tra cui operazioni di I/O, gestione delle stringhe, networking, criptografia e altro ancora.
- Compilazione rapida: Il compilatore di Go è veloce e produce codice eseguibile altamente ottimizzato. Questo facilita lo sviluppo iterativo e la distribuzione rapida delle applicazioni.
Complessivamente, Go è diventato popolare tra gli sviluppatori per la sua semplicità, prestazioni elevate e capacità di gestire carichi di lavoro complessi, ed è utilizzato in una varietà di settori, tra cui lo sviluppo di applicazioni web, sistemi distribuiti, servizi cloud e molto altro ancora.
Con Go è possibile realizzare sia applicazioni a linea di comando che applicazioni web, eventualmente sfruttando GopherJS che permette di tradurre automaticamente Go in Javascript. All’interno del sito ufficiale è possibile testare il codice direttamente nel sito, realizzando un semplice Hello, World! con poche righe di codice:
package main import "fmt" func main() { fmt.Println("Hello, amicone del cuore") }
Il risultato è il seguente.
Se invece volessimo fare la stessa cosa lato web, si potrebbe fare in questi termini:
package main import ( "fmt" "log" "net/http" ) func helloFunc(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "Hello world!") } func main() { http.HandleFunc("/", helloFunc) log.Fatal(http.ListenAndServe(":8080", nil)) }
Esempio di funzione in Go
Un esempio di funzione in Go è la seguente, che verifica se l’indirizzo IPv4 che gli passi sia di broadcast oppure no:
func (addr ipv4addr) ZeroAddress() bool { return addr == 0xFFFFFFFF }
Calcolatrice scritta in Go
(esempio da testare per capire meglio)
package main import ( "fmt" ) func main() { var operator string var num1, num2 float64 fmt.Print("Inserisci il primo numero: ") fmt.Scanln(&num1) fmt.Print("Inserisci il secondo numero: ") fmt.Scanln(&num2) fmt.Print("Inserisci l'operatore (+, -, *, /): ") fmt.Scanln(&operator) result := 0.0 switch operator { case "+": result = num1 + num2 case "-": result = num1 - num2 case "*": result = num1 * num2 case "/": if num2 != 0 { result = num1 / num2 } else { fmt.Println("Errore: divisione per zero!") return } default: fmt.Println("Operatore non valido!") return } fmt.Printf("Il risultato di %.2f %s %.2f è: %.2f\n", num1, operator, num2, result) }
Altri esempi di funzioni Go
Queste sono solo alcune delle molte funzioni utili che si possono scrivere in Go. Spero che queste ti diano una buona base per iniziare a esplorare il linguaggio e le sue potenzialità!
package main import ( "fmt" "math/rand" "sort" "time" ) func main() { // Inizializza il generatore di numeri casuali rand.Seed(time.Now().UnixNano()) // 1. Funzione per calcolare la somma di due numeri sum := add(5, 7) fmt.Println("Somma di 5 e 7:", sum) // 2. Funzione per trovare il massimo tra due numeri max := maximum(10, 25) fmt.Println("Massimo tra 10 e 25:", max) // 3. Funzione per invertire un array arr := []int{1, 2, 3, 4, 5} reverseArray(arr) fmt.Println("Array invertito:", arr) // 4. Funzione per ordinare un array arrToSort := []int{5, 2, 8, 1, 9} sort.Ints(arrToSort) fmt.Println("Array ordinato:", arrToSort) // 5. Funzione per estrarre un numero casuale compreso tra un intervallo specificato randomNum := generateRandomNumber(1, 100) fmt.Println("Numero casuale tra 1 e 100:", randomNum) // 6. Funzione per calcolare la media di un array di numeri nums := []float64{5.5, 6.6, 7.7, 8.8, 9.9} average := calculateAverage(nums) fmt.Println("Media degli elementi:", average) // 7. Funzione per verificare se un numero è presente in un array exists := isNumberExists(arrToSort, 8) fmt.Println("Il numero 8 esiste nell'array:", exists) // 8. Funzione per calcolare la potenza di un numero power := calculatePower(2, 3) fmt.Println("2 elevato alla 3:", power) // 9. Funzione per contare il numero di vocali in una stringa vowelsCount := countVowels("Hello World") fmt.Println("Numero di vocali nella stringa:", vowelsCount) // 10. Funzione per invertire una stringa reversedString := reverseString("Hello") fmt.Println("Stringa invertita:", reversedString) } func add(a, b int) int { return a + b } func maximum(a, b int) int { if a > b { return a } return b } func reverseArray(arr []int) { for i, j := 0, len(arr)-1; i < j; i, j = i+1, j-1 { arr[i], arr[j] = arr[j], arr[i] } } func generateRandomNumber(min, max int) int { return rand.Intn(max-min+1) + min } func calculateAverage(nums []float64) float64 { sum := 0.0 for _, num := range nums { sum += num } return sum / float64(len(nums)) } func isNumberExists(arr []int, target int) bool { for _, num := range arr { if num == target { return true } } return false } func calculatePower(base, exponent int) int { result := 1 for i := 0; i < exponent; i++ { result *= base } return result } func countVowels(str string) int { count := 0 vowels := "aeiouAEIOU" for _, char := range str { if strings.ContainsRune(vowels, char) { count++ } } return count } func reverseString(str string) string { runes := []rune(str) for i, j := 0, len(runes)-1; i < j; i, j = i+1, j-1 { runes[i], runes[j] = runes[j], runes[i] } return string(runes) }
Dove e come scaricare Go
Photo by Max Duzij on Unsplash
👇 Da non perdere 👇
- 📈 Analizza Cellulari 📱
- 🔐 AI che dolor, Chat 🏴
- 🎯 Targetizza Database SQL 🗄
- 📊 Analizza Errori più comuni 📛
- 🚧 Costruisci Evergreen 📟
- 👩💻 Programma Gratis 🎉
- 💻 Configura Hosting a confronto 💑
- 🔒 Conosci Hosting reti e domini 💻
- 👩💻 Tapioca Informatica 🖥
- 💻 Iconizza Internet 💻
- 🔒 Gestisci Lavoro 🔧
- 💡 Mostra Marketing & SEO 🌪
- 🔑 Apprendi Meteo ⛅
- 🤯 Visiona Mondo Apple 🍎
- 🔍 Supervisiona Mondo Domini 🌐
- 🚀 Metti in cloud monitoraggio servizi online 📈
- 🔮 Anatomizza Nuove tecnologie 🖥
- 🔒 Antani PEC e firma digitale 📩
- 👀 Prematura Programmare 🖥
- 🎮 Lonfa Scrivere 🖋
- 🔒 Conosci Servizi di SMS 📶
- 👀 Guarda Sicurezza informatica e privacy digitale 🖥
- 🎮 Ricorda Siti web 🌎
- 🤖 Ottimizza Spiegoni artificiali 🎓
- 🧠 Neuralizza Svago 🎈
- 📡 Quantizza Usare Excel 🌀
- 🤖 Sovrascrivi Windows 😲
- 🎨 Personalizza Wireless 🚁
- 🔑 Decifra WordPress 🤵
- 💬 Il nostro canale Telegram: iscriviti
- 🔵 Come aprire un’immagine in formato .heic
- 🟠 Come caricare delle GIF personalizzate su Whatsapp e Facebook [GUIDA]
- 🟢 Come aprire un’immagine in formato .heic