Em Go, uma aplicação está organizada em pacotes. Um pacote é uma coleção de ficheiros de código-fonte que estão na mesma pasta. Todos os ficheiros de código-fonte de uma pasta têm de ter o mesmo nome de pacote no topo do ficheiro. Por convenção, os pacotes têm o mesmo nome da pasta onde estão.
package greeting
O Go disponibiliza uma extensa biblioteca padrão de pacotes, que podes usar no teu programa com a palavra-chave import.
Os pacotes da biblioteca padrão são importados pelo seu nome.
package greeting
import "fmt"
Um pacote importado é depois referido pelo nome do pacote:
world := "World"
fmt.Sprintf("Hello %s", world)
O Go determina se um item pode ser chamado por código de outros pacotes através da forma como é declarado. Para tornar uma função, um tipo, uma variável, uma constante ou um campo de struct visíveis externamente (o que se chama exportado), o nome tem de começar com uma letra maiúscula.
package greeting
// Hello is a public function (callable from other packages).
func Hello(name string) string {
return "Hello " + name
}
// hello is a private function (not callable from other packages).
func hello(name string) string {
return "Hello " + name
}
O Go disponibiliza um pacote incorporado chamado fmt (pacote de formatação), que oferece várias funções para manipular o formato da entrada e da saída.
A função mais usada é a Sprintf, que usa verbos como %s para interpolar valores numa string e devolve essa string.
import "fmt"
food := "taco"
fmt.Sprintf("Bring me a %s", food)
// Returns: Bring me a taco
Em Go, os números de vírgula flutuante formatam-se de forma conveniente com os verbos da Sprintf: %g (representação compacta), %e (expoente) ou %f (sem expoente).
Os três verbos permitem controlar a largura do campo e a posição numérica.
import "fmt"
number := 4.3242
fmt.Sprintf("%.2f", number)
// Returns: 4.32
Encontras a lista completa dos verbos disponíveis na documentação do pacote de formatação.
O fmt contém outras funções para trabalhar com strings, como a Println, que simplesmente imprime na consola os argumentos que recebe, e a Printf, que formata a entrada da mesma forma que a Sprintf antes de a imprimir.
Era uma vez um programador excêntrico que vivia numa casa estranha com janelas gradeadas. Um dia, aceitou um trabalho através de um site de ofertas de emprego online para construir um robô de festas. O robô devia cumprimentar as pessoas e ajudá-las a chegar aos seus lugares. A primeira edição era muito técnica e revelava a falta de interação humana do programador. Algumas dessas caraterísticas também passaram para a edição seguinte.
Implementa a função Welcome para devolver uma mensagem de boas-vindas usando o nome indicado:
Welcome("Christiane")
// => Welcome to my party, Christiane!
Implementa a função HappyBirthday para devolver uma mensagem de aniversário usando o nome e a idade indicados da pessoa.
Infelizmente, o programador é um pouco exibicionista, por isso o robô tem de demonstrar que sabe o aniversário de todos os convidados.
HappyBirthday("Frank", 58)
// => Happy birthday Frank! You are now 58 years old!
Implementa a função AssignTable para dar indicações.
Deve aceitar 5 parâmetros.
string)int)string)string)float64)Podes ver o formato exato do resultado no exemplo abaixo.
O robô apresenta o número da mesa num formato de 3 algarismos. Se o número tiver menos de 3 algarismos, recebe zeros à esquerda adicionais até ficar com 3 algarismos (por exemplo, 3 torna-se 003). O robô também menciona a distância até à mesa. Felizmente, apenas com uma precisão limitada a 1 algarismo.
AssignTable("Christiane", 27, "Frank", "on the left", 23.7834298)
// =>
// Welcome to my party, Christiane!
// You have been assigned to table 027. Your table is on the left, exactly 23.8 meters from here.
// You will be sitting next to Frank.
Inscreve-te no Exercism para aprenderes e dominares Go com 34 conceitos165 exercícios, e mentoria humana real, tudo grátis.