Skip to content

Dépôt contenant le code et les supports de la formation Go (14-16 octobre 2024) par Paul Millet de LaMeDuSe. Inclut des TPs couvrant les bases du langage, ainsi que des POCs sur gRPC, Gorm et Gin-Gonic pour des applications pratiques.

Notifications You must be signed in to change notification settings

Thomega35/FormationGo

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

24 Commits
 
 
 
 
 
 

Repository files navigation

Dépôt de code de la formation Go

Ce dépôt contient le code rédigé et fourni lors de la formation Go. Cette formation a pour objectif d'apprendre les bases du langage Go et ses cas d'usage. Celle-ci a eu lieu du 14 au 16 octobre 2024, dispensée par Paul Millet de l'organisme "LaMeDuSe".

alt text

Architecture du dépôt

formation_go/
├── README.md
├── code/
│   ├── sujetX/
│   │   ├── packageX/
│   │   │   └── packageX.go
│   │   ├── go.mod
│   │   ├── (go.sum)
│   │   └── main.go
│   └── ...
└── supports/
    ├── gog_v1_fr--2-
    ├── pictureX.png
    └── ...

Membre de la formation

  • Cyril CANILLAS
  • Edgar CROUS
  • Julien FONTANEL
  • Kaëlig LE MENER
  • Khady DIOP
  • Marwane AIT YACHOU
  • Pierre AUFFRAY
  • Thomas DELAPART
  • Ugo OGER

Tps

Version de Golang : 1.21.4

OS : WSL 2 [Ubuntu 22.04.5]

TP Description
TP1 Hello World
TP2 Package avec fonctions de base mathématiques
TP3 Structures, méthodes et hérédité
TP4 Utilisation des Goroutines
TP5 Manipulation de fichiers
TP6 Calculatrice et tests (Bonus iterface graphique Fyne)

alt text

POC grpc + protobuf

Le code du POC disponible dans le répertoire mygrpc implémente un client et un serveur simple communicant avec le protocol gRPC.

Protobuff définit une structure de données simple pour représenter un utilisateur.

Le serveur définit deux users protobuff en dur et expose une méthode GetUsers pour les récupérer.

Le client appelle cette méthode et récupère le user 1, il affiche alors Greeting + le nom de l'utilisateur.

Compiler les protobuff

Il faut compiler les protobuff pour générer les fichiers go correspondants si on modifie le fichier mygrpc.proto ou si les fichiers go dans /src/protos_ext ne sont pas présents.

Pour cela, on définit deux varibles d'environnement et on lance la commande protoc.

export GO_MOD=bitbucket.org/mygrpc

export PROTOBUF_DIR=./proto

protoc --experimental_allow_proto3_optional --go_out=src --go_opt=paths=source_relative --go_opt=Mprotos_ext/mygrpc.proto=$GO_MOD/protos_ext --go-grpc_out=src --go-grpc_opt=paths=source_relative --go-grpc_opt=Mprotos_ext/mygrpc.proto=$GO_MOD/protos_ext protos_ext/mygrpc.proto

Avec grpcGateway, on peut générer un client HTTP pour communiquer avec le serveur gRPC.

Il nous faut pour utiliser Gateway, récupérer la librairie google-api et la placer dans le répertoire google comme mentionné dans le .gitignore. Pour cela :

cd code/mygrpc/
git clone https://github.com/googleapis/googleapis
mv googleapis google
go mod tidy

Une fois la librairie installé, il est possible de lancer la commande suivante pour compiler l'autre protobuff dans /src/proto au lieu de /src/protos_ext :

protoc --experimental_allow_proto3_optional --go_out=src --go_opt=paths=source_relative --go_opt=Mproto/mygrpc.proto=$GO_MOD/proto --go-grpc_out=src --go-grpc_opt=paths=source_relative --go-grpc_opt=Mproto/mygrpc.proto=$GO_MOD/proto --grpc-gateway_out=src --grpc-gateway_opt=paths=source_relative --grpc-gateway_opt=Mproto/mygrpc.proto=$GO_MOD/proto --proto_path=. proto/mygrpc.proto 

Lancer le serveur grpc v1

Pour lancer la v1 du serveur, il faut renomer le fichier main.go en temp.go et renomer main_v1.go en main.go.

go run main.go server

Une fois le serveur lancé, il est possible de lancer le client, dans un autre terminal :

go run main.go client

Lancer le serveur grpc-gateway

Il est possible de tester le serveur comme dans la version précedente en utilisant le fichier main.go cette fois. Soit de nouveau avec 2 terminaux serveur + client ou cette fois d'utiliser la commande qui combine les deux dans un seul terminal avec des goroutines :

go run main.go all

Le résultat du terminal devrait avoir la forme suivante :

--- RPC ---
2024/10/16 14:29:00 RPC CreateUser took 2.035034ms
2024/10/16 14:29:00 Created User ID: 1
2024/10/16 14:29:00 RPC ListUsers took 411.66µs
2024/10/16 14:29:00 User: 1, Name: Alice, Age: 22
2024/10/16 14:29:00 RPC DeleteUser took 365.157µs
2024/10/16 14:29:00 Deleted User ID: 1
--- HTTP ---
2024/10/16 14:29:00 HTTP CreateUser took 37.991717ms
2024/10/16 14:29:00 Created User ID: 1
2024/10/16 14:29:00 HTTP ListUsers took 512.17µs
2024/10/16 14:29:00 User: 1, Name: Alice, Age: 22
2024/10/16 14:29:00 HTTP DeleteUser took 539.273µs
2024/10/16 14:29:00 Deleted User ID: 1

POC Gorm

Prérequis :

  • Avoir une base de données SQL (ici PostgreSQL) configurée avec les mêmes informations que le projet, ici :
    • user: postgres
    • password: root
    • dbname: postgres
    • host: localhost (127.0.0.1)
    • port: 5432

On peut ensuite directement lancer le projet avec la commande :

cd mygorm
go run main.go

On pourra alors voir l'initialisation de la base de données, l'insertion de données, la récupération de données, la modification et la suppression de données.

Logs of Gorm

POC Gin-Gonic

Avec Gin-Gonic, on peut créer des routes et des middlewares pour notre serveur HTTP. On a ici une liste de routes qui sont accessibles via un navigateur web sur l'adresse http://localhost:8080.

Pour lancer le serveur, il suffit de lancer la commande :

cd mygingonic
go run main.go

On pourra alors voir les logs du serveur et les requêtes effectuées sur les différentes routes dans le terminal.

Et via un navigateur ou un autre terminal, on pourra accéder aux différentes routes :

curl http://localhost:8080/ping
curl http://localhost:8080/users
curl -X POST http://localhost:8080/users -H "Content-Type: application/json" -d "\"Dave\""
curl -X DELETE http://localhost:8080/users/1

About

Dépôt contenant le code et les supports de la formation Go (14-16 octobre 2024) par Paul Millet de LaMeDuSe. Inclut des TPs couvrant les bases du langage, ainsi que des POCs sur gRPC, Gorm et Gin-Gonic pour des applications pratiques.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •  

Languages