Hoje, algumas pessoas no twitter e até mesmo aqui na UFABC me mandaram um link: http://golang.org/. Parece que é uma linguagem desenvolvida pelo Google, para procedimentos internos, sejam lá quais eles forem.

Resolvi dar uma olhada no site, nos exemplos, para ver o que há de novo. Primeiramente, o típico “Hello World” em Go:

package main
import "fmt"

func main() {
  fmt.Printf("Hello, world\n")
}

Minha primeira impressão foi: meu Deus, reinventaram o Java! Sintaxe C/C++, construções estranhas (fmt.Printf?). Mas fica pior:

func nextInt(b []byte, pos int) (value, nextPos int)
func ReadFull(r Reader, buf []byte) (n int, err os.Error)

Percebem? Uma função chama-se nextInt, a outra ReadFull. Me lembra do PHP e suas funções sem padronização de nomes… e a sintaxe?

package main
import (
    "os";
    "flag";  // command line option parser
)
var omitNewline = flag.Bool("n", false, "don't print final newline")

const (
    Space = " ";
    Newline = "\n";
)

func main() {
    flag.Parse();   // Scans the arg list and sets up flags
    var s string = "";
    for i := 0; i < flag.NArg(); i++ {
        if i > 0 {
            s += Space
        }

        s += flag.Arg(i)
    }

    if !*omitNewline {
        s += Newline
    }
    os.Stdout.WriteString(s);
}

Conforme a própria documentação do google, isso faz algo semelhante ao “echo”, do linux. O código em Ruby?

omitir_quebra_linha = ARGV.delete '-n'

texto = ARGV.join(" ")
texto += "\n" unless omitir_quebra_linha
print texto

Pelo que me pareceu, GO é uma mistura entre as piores coisas de C++ e Pascal. Aliás, o que é isso:

var s string = "";

Intuitivo? As aspas são atribuídas a quem? À variável “string”, ou ao “s”? Para que exatamente serve a palavra “var”? Na documentação, eles informam que é possível iniciar uma variável sem usar o var, mas usando :=, quer dizer, temos duas sintaxes para atribuir valores às variáveis! Eu gosto da forma que Ruby e outras linguagens me oferecem para resolver o mesmo problema de várias formas diferentes, mas aplicar isso para declaração de variáveis não é um pouco extremo? Só para terminar esse artigo, vai um trecho do site de Go:

Why are you creating a new language?

Go was born out of frustration with existing languages and environments for systems programming. Programming had become too difficult and the choice of languages was partly to blame(…)

Go is an attempt to combine the ease of programming of an interpreted, dynamically typed language with the efficiency and safety of a statically typed, compiled language. It also aims to be modern(…)

Moderna? Linguagens mais novas tentam nos soltar da idéia de “sintatic salt”, ou usar ponteiros, referências, <pacote>.<pacote>.<class>.<metodo> para fazer até as coisas mais simples…

Como disse AkitaOnRails, “Síndrome de ‘Não Inventada Aqui’…