Type safety e Memory safe ◦ Não possui buffer overflows ◦ Não permite operações aritméticas com ponteiros (pointer arithmetic) • Compilada • Orientada a objetos (mas sem class, extends ou implements como no Java) • Controlada por GC • Estaticamente tipada • Parte da familía do C
condições como no Java e C • { } são obrigatórios para delimitar o escopo • Condições ◦ If ▪ Variáveis podem ser declaradas na condição e terão escopo apenas dentro do if ◦ For ▪ break e continue ▪ while do C é for no Go ▪ Se omitir a condição do loop ele executará para sempre (while true do C) ◦ Switch ▪ Similar ao C e Java, porém só executa o case selecionado ▪ Não necessita de break no fim da condição, ele é implícito
even } else { // odd } if i % 2 == 0 { // divisível por 2 } else if i % 3 == 0 { // divisível por 3 } if f, err := os.Open("f.txt"); err == nil { // abriu arquivo com sucesso } else { // erro ao abrir arquivo }
• Variadic functions igual do C (número de argumentos variável) func fprint(format string, args ...interface{}) • Varíavels de retorno podem ser nomeadas func f() (value int, error err) • Omissão do tipo em argumentos do mesmo tipo em sequência func f(s1, s2, s3 string, value int) bool • Suporte a Closures (funções dentro de funções)
new(int) z := &Foo{} • Não é permitido operações em cima do endereço var p *int = &a[0] var q = p+2 // não permitido • Existe o método new mas não o delete • Controlado pelo GC
T(v) converte o valor v para o tipo T i := 42 f := float64(i) u := uint(f) • Type assertion (o tipo na esquerda deve ser obrigatoriamente uma interface) var i interface{} = 42 f := i.(float64) f, ok := i.(float64)
panic e recover são funções • Defer agenda execução de uma função • Panic causa um runtime error (similar a throw new Exception() no Java) • Recover é usado para capturar runtime errors
◦ Usa-se a keyword go para invocar uma função • Channels ◦ Permite a comunicação entre goroutines ◦ Útil para sincronizar execução ◦ O comando select funciona como um switch para channels ◦ Channels podem ser bufferizados ou não