Skip to content

Go

Commandes de base

go build: télécharge, installe les dépendances et build un exécutable (si le fichier est un main.go) ou un package (si c'est un autre nom)

go get -u monpackage: update à le dernière version le module. En 1.13, télécharge un module et le locke (lockfile). si jamais on supprime les sources dans le gopath, il sera retéléchargé

Syntaxe & conventions

  • _: appeler uniquement la fonction d'init d'un module: http://go-database-sql.org/importing.html
  • noms de package: pas de tiret ou d'underscore
  • méthode ou member avec une majuscule: exporté et pouvant être utilisée dans d'autres packages.
  • Le nommage en majuscule sert aussi à séléctionner les marshaling json
1
2
3
4
type Vehicle struct {
    Name  string  `json:"nom"`
    Speed float32 `json:"vitesse,omitempty"` // ne sera pas affiché si pas de valeur initialisée
}
  • Pas d'héritage, on utilise de la composition! On peut utiliser des membres nommés (qu'on va initialiser avec la syntaxe d := Dragster{}) ou des membres anonymes, ce qui permettra d'utiliser les fonctions de la struct imbriquée)
1
2
3
4
5
6
7
type Vehicle struct {
}

type Dragster struct {
    v       Vehicle // membre, à initialiser manuellement dans la struct
    Vehicle         // membre anonyme
}

Mode module ou mode GOPATH?

  • en 1.13, ajout de la notion de Modules
  • "GOPATH c'est le passé, les modules c'est le futur"
  • go get de la 1.13 gère le mode module et GOPATH. Si la variable GO111 est activée, mode module. Sinon mode ancien, tout va dans le gopath.

Gopath

  • par défaut dans ~/go.
  • Contient bin, src (résultat des go get) et pkg
  • go env GOPATH: permet de trouver son GOPATH

Module

dans le répertoire du projet: go.mod / go.sum * go.sum et go.mod sont générés dans le projet et servent de lockfile * les modules gettés vont dans le cache des modules * Pour inspecter le code source: mieux vaut faire un git clone

Docker + Go

Comme Go n'a pas besoin de dépendances externes pour par ex une API REST (http, log) et build en binaire!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

1
2
3
FROM scratch

ADD mybinary

Tutos débutants