{"id":17781634,"url":"https://github.com/thomega35/formationgo","last_synced_at":"2025-08-12T19:33:15.444Z","repository":{"id":259204931,"uuid":"873671675","full_name":"Thomega35/FormationGo","owner":"Thomega35","description":"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.","archived":false,"fork":false,"pushed_at":"2024-10-22T08:28:50.000Z","size":44399,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2024-12-14T12:42:42.306Z","etag":null,"topics":["go","gorm","grpc"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Thomega35.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":"supports/calc.png","governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-10-16T14:33:34.000Z","updated_at":"2024-10-22T08:28:54.000Z","dependencies_parsed_at":"2024-10-27T08:51:00.574Z","dependency_job_id":null,"html_url":"https://github.com/Thomega35/FormationGo","commit_stats":null,"previous_names":["thomega35/formationgo"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Thomega35%2FFormationGo","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Thomega35%2FFormationGo/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Thomega35%2FFormationGo/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Thomega35%2FFormationGo/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Thomega35","download_url":"https://codeload.github.com/Thomega35/FormationGo/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":229705476,"owners_count":18110792,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["go","gorm","grpc"],"created_at":"2024-10-27T04:03:48.517Z","updated_at":"2024-12-14T12:42:49.177Z","avatar_url":"https://github.com/Thomega35.png","language":"Go","readme":"# Dépôt de code de la formation Go\n\nCe 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\".\n\n![alt text](supports/lameduse.png)\n\n## Architecture du dépôt\n\n```\nformation_go/\n├── README.md\n├── code/\n│   ├── sujetX/\n│   │   ├── packageX/\n│   │   │   └── packageX.go\n│   │   ├── go.mod\n│   │   ├── (go.sum)\n│   │   └── main.go\n│   └── ...\n└── supports/\n    ├── gog_v1_fr--2-\n    ├── pictureX.png\n    └── ...\n```\n\n## Membre de la formation\n\n- Cyril CANILLAS\n- Edgar CROUS\n- Julien FONTANEL\n- Kaëlig LE MENER\n- Khady DIOP\n- Marwane AIT YACHOU\n- Pierre AUFFRAY\n- Thomas DELAPART\n- Ugo OGER\n\n## Tps\n\nVersion de Golang : 1.21.4\n\nOS : WSL 2 [Ubuntu 22.04.5]\n\n| TP     | Description                                              |\n| ------ | -------------------------------------------------------- |\n| TP1    | Hello World                                              |\n| TP2    | Package avec fonctions de base mathématiques             |\n| TP3    | Structures, méthodes et hérédité                         |\n| TP4    | Utilisation des Goroutines                               |\n| TP5    | Manipulation de fichiers                                 |\n| TP6    | Calculatrice et tests (Bonus iterface graphique Fyne)    |\n\n![alt text](supports/calc.png)\n\n## POC grpc + protobuf\n\nLe code du POC disponible dans le répertoire mygrpc implémente un client et un serveur simple communicant avec le protocol gRPC.\n\nProtobuff définit une structure de données simple pour représenter un utilisateur.\n\nLe serveur définit deux users protobuff en dur et expose une méthode GetUsers pour les récupérer.\n\nLe client appelle cette méthode et récupère le user 1, il affiche alors Greeting + le nom de l'utilisateur.\n\n### Compiler les protobuff\n\nIl 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.\n\nPour cela, on définit deux varibles d'environnement et on lance la commande protoc.\n```bash\nexport GO_MOD=bitbucket.org/mygrpc\n\nexport PROTOBUF_DIR=./proto\n\nprotoc --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\n```\n\nAvec grpcGateway, on peut générer un client HTTP pour communiquer avec le serveur gRPC. \n\nIl 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 :\n```bash\ncd code/mygrpc/\ngit clone https://github.com/googleapis/googleapis\nmv googleapis google\ngo mod tidy\n```\n\nUne 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 :\n\n```bash\n\nprotoc --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 \n```\n\n### Lancer le serveur grpc v1\n\nPour lancer la v1 du serveur, il faut renomer le fichier main.go en temp.go et renomer main_v1.go en main.go.\n\n```bash\ngo run main.go server\n```\n\nUne fois le serveur lancé, il est possible de lancer le client, dans un autre terminal :\n\n```bash\ngo run main.go client\n```\n\n### Lancer le serveur grpc-gateway\n\nIl 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 :\n\n```bash\ngo run main.go all\n```\n\nLe résultat du terminal devrait avoir la forme suivante : \n```bash\n--- RPC ---\n2024/10/16 14:29:00 RPC CreateUser took 2.035034ms\n2024/10/16 14:29:00 Created User ID: 1\n2024/10/16 14:29:00 RPC ListUsers took 411.66µs\n2024/10/16 14:29:00 User: 1, Name: Alice, Age: 22\n2024/10/16 14:29:00 RPC DeleteUser took 365.157µs\n2024/10/16 14:29:00 Deleted User ID: 1\n--- HTTP ---\n2024/10/16 14:29:00 HTTP CreateUser took 37.991717ms\n2024/10/16 14:29:00 Created User ID: 1\n2024/10/16 14:29:00 HTTP ListUsers took 512.17µs\n2024/10/16 14:29:00 User: 1, Name: Alice, Age: 22\n2024/10/16 14:29:00 HTTP DeleteUser took 539.273µs\n2024/10/16 14:29:00 Deleted User ID: 1\n```\n\n## POC Gorm\n\nPrérequis :\n- Avoir une base de données SQL (ici PostgreSQL) configurée avec les mêmes informations que le projet,\nici :\n    - user: postgres\n    - password: root\n    - dbname: postgres\n    - host: localhost (127.0.0.1)\n    - port: 5432\n\nOn peut ensuite directement lancer le projet avec la commande :\n\n```bash\ncd mygorm\ngo run main.go\n```\n\nOn 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.\n\n![Logs of Gorm](supports/sql.png)\n\n## POC Gin-Gonic\n\nAvec 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.\n\nPour lancer le serveur, il suffit de lancer la commande :\n\n```bash\ncd mygingonic\ngo run main.go\n```\n\nOn pourra alors voir les logs du serveur et les requêtes effectuées sur les différentes routes dans le terminal.\n\nEt via un navigateur ou un autre terminal, on pourra accéder aux différentes routes :\n\n```bash\t\ncurl http://localhost:8080/ping\ncurl http://localhost:8080/users\ncurl -X POST http://localhost:8080/users -H \"Content-Type: application/json\" -d \"\\\"Dave\\\"\"\ncurl -X DELETE http://localhost:8080/users/1\n```\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthomega35%2Fformationgo","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fthomega35%2Fformationgo","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthomega35%2Fformationgo/lists"}