{"id":27155881,"url":"https://github.com/cloudsteak/trn-go-cli","last_synced_at":"2025-04-08T19:57:11.471Z","repository":{"id":209493873,"uuid":"712476904","full_name":"cloudsteak/trn-go-cli","owner":"cloudsteak","description":"Cobra Cli - Go lang","archived":false,"fork":false,"pushed_at":"2023-11-28T11:01:00.000Z","size":19,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2024-06-19T17:57:16.673Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/cloudsteak.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-10-31T14:45:36.000Z","updated_at":"2023-11-27T16:16:03.000Z","dependencies_parsed_at":"2024-06-19T17:19:23.624Z","dependency_job_id":"26378d69-bc4b-4b32-8052-b866371aac7e","html_url":"https://github.com/cloudsteak/trn-go-cli","commit_stats":null,"previous_names":["cloudsteak/trn-go-cli"],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cloudsteak%2Ftrn-go-cli","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cloudsteak%2Ftrn-go-cli/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cloudsteak%2Ftrn-go-cli/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cloudsteak%2Ftrn-go-cli/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/cloudsteak","download_url":"https://codeload.github.com/cloudsteak/trn-go-cli/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247918923,"owners_count":21018044,"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":[],"created_at":"2025-04-08T19:57:10.734Z","updated_at":"2025-04-08T19:57:11.464Z","avatar_url":"https://github.com/cloudsteak.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Go - Parancssori alkalmazás (Cobra-Cli)\n\nParancssori alkalmazást készítünk, amellyel nagyon sok lehetőségünk van olyan funkciókat egyben használni, amelyeket máskülönben sok-sok külön eszközzel bvennénk igénybe. Ehhez a [Cobra](https://github.com/spf13/cobra)-t használjuk. Olyan alkalmazást hozunk létre most, amely bizonyos súlyosságú hibákat képes fájlba írni.\n\n## Előfeltételek\n\nAz alábbi helyen megtalálod az előkészületeket a Go-ban való fejlesztéshez: https://github.com/cloudsteak/golang-basics\n\n## Projekt létrehozás\n\n1. Nyiss egy parancssort (CMD)\n2. Navigálj abba a mappába ahol a kódod fogod tárolni a helyi gépeden.\n3. Hozd létre a projekted mappáját. Pl.: `trn-go-cli`\n\n```bash\nmkdir trn-go-cli\n```\n\n4. Lépj be a mappába\n\n```bash\ncd trn-go-cli\n```\n\n5. Készítsd el a projekted alap struktúráját (`github.com/cloudsteak/trn-go-cli` helyett használd a saját kódodhoz tartozó github elérhetőséget)\n\n```bash\ngo mod init github.com/cloudsteak/trn-go-cli\n```\n\n6. indítsd el innen a Visual Studio Code-ot.\n\n```bash\ncode .\n```\n\n## Go alkalmazás\n\n1. Hozzuk létre at alap mappa struktúrát\n\n```go\nmkdir -p cmd/naplo/ir\nmkdir -p cmd/naplo/olvas\nmkdir -p pkg\n```\n\n2. Telepítsük a Cobra-t (parancssorból a projekt mappában)\n\n```go\ngo get -u github.com/spf13/cobra@latest\n```\n\n3. A `pkg` mappában hozd létre a `logging.go` fájlt. Ebben létrehozunk egy napló olvasó és egy napló író függvényt:\n\n```go\npackage pkg\n\nimport (\n\t\"bufio\"\n\t\"fmt\"\n\t\"log\"\n\t\"os\"\n\t\"strings\"\n\t\"time\"\n)\n\nfunc NaploOlvaso(naploFajl string, sullyossag string) {\n\t// Fájl megnyitása\n\tf, err := os.Open(naploFajl)\n\tif err != nil {\n\t\tlog.Fatal(err)\n\t}\n\n\t// Fájl zárás. Mér a tartalma megvan\n\tdefer f.Close()\n\n\t//Súlyosság keresése a fájl tartalmában\n\tr := bufio.NewReader(f)\n\tfor {\n\t\ts, err := r.ReadString('\\n')\n\t\tif err != nil {\n\t\t\tbreak\n\t\t}\n\t\t// Ha megvan a megfeleő súlyosság, akkor kiírjuk a képernyőre\n\t\tif strings.Contains(s, \" - \"+sullyossag+\" - \") {\n\t\t\tfmt.Println(s)\n\t\t}\n\t}\n}\n\nfunc NaploIro(naploFajl string, sulyossag string, bejegyzes string) {\n\t// Fájl megnyitása. Ha nem létezik, akkor létrehozzuk\n\tf, err := os.OpenFile(naploFajl,\n\t\tos.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)\n\tif err != nil {\n\t\tlog.Fatal(err)\n\t}\n\n\t// Teljes bejegyzés összeállítása\n\tnaploBejegyzes := (time.Now().Format(time.DateTime)) + \" - \" + sulyossag + \" - \" + bejegyzes + \"\\n\"\n\t// Bejegyzés fájlba írása\n\tl, err := f.WriteString(naploBejegyzes)\n\tif err != nil {\n\t\tlog.Fatalln(err)\n\t\tdefer f.Close()\n\t\treturn\n\t}\n\n\t// Visszajelzés a felhasználónak\n\tfmt.Println(l, \"karakter kiírva fájlba\")\n\t// Fájl zárása\n\terr = f.Close()\n\tif err != nil {\n\t\tlog.Fatalln(err)\n\t\tdefer f.Close()\n\t\treturn\n\t}\n}\n```\n\n4. Hozd, `cmd/naplo/ir/ir.go` fájlt:\n\n```go\npackage ir\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\n\t\"slices\"\n\n\t\"github.com/cloudsteak/trn-go-cli/pkg\"\n\t\"github.com/spf13/cobra\"\n)\n\n// Paraméterek\ntype options struct {\n\tnaploFajl string\n\tsulyossag string\n\tbejegyzes string\n}\n\nfunc NewCmd() *cobra.Command {\n\to := \u0026options{}\n\n\tcmd := \u0026cobra.Command{\n\t\tUse:   \"ir\",\n\t\tShort: \"Naplóbejegyzés írása\",\n\t\tLong:  `Bármilyen üzenet írása naplófájlba`,\n\t\tRunE: func(cmd *cobra.Command, args []string) error {\n\t\t\treturn run(o)\n\t\t},\n\t}\n\n\t// Paraméterek beállítása\n\tcmd.Flags().StringVarP(\u0026o.naploFajl, \"naplo-fajl\", \"f\", \"naplo.log\", \"Napló fájl elérési útja\")\n\tcmd.Flags().StringVarP(\u0026o.sulyossag, \"suly\", \"s\", \"INFO\", \"Berjegyzés súlyossága. Alapértelmezett: INFO. Lehetőségek: ERROR, WARN, INFO\")\n\tcmd.Flags().StringVarP(\u0026o.bejegyzes, \"bejegyzes\", \"b\", \"\", \"Bejegyzés, üzenet\")\n\n\treturn cmd\n}\n\nfunc run(o *options) error {\n\t// Súlyosságok\n\tsulyok := []string{\"ERROR\", \"INFO\", \"WARN\"}\n\n\t// Naplófájl paraméter ellenőrzése\n\tif o.naploFajl == \"\" {\n\t\terr := errors.New(\"nincs naplófájl megadva\")\n\t\treturn fmt.Errorf(\"%w\", err)\n\t}\n\n\t// Súlyosság paraméter ellenőrzése\n\tif !slices.Contains(sulyok, o.sulyossag) {\n\t\terr := errors.New(\"nem megfelelő súlyosság\")\n\t\treturn fmt.Errorf(\"%w: %s\", err, o.sulyossag)\n\t}\n\n\t// Bejegyzés ellenőrzése\n\tif o.bejegyzes == \"\" {\n\t\terr := errors.New(\"bejegyzés, üzenet nem lehet üres\")\n\t\treturn fmt.Errorf(\"%w\", err)\n\t}\n\n\t// Napló írás függvény meghívása\n\tpkg.NaploIro(o.naploFajl, o.sulyossag, o.bejegyzes)\n\treturn nil\n}\n\n```\n\n5. Hozd, `cmd/naplo/olvas/olvas.go` fájlt:\n\n```go\npackage olvas\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\n\t\"slices\"\n\n\t\"github.com/cloudsteak/trn-go-cli/pkg\"\n\t\"github.com/spf13/cobra\"\n)\n\n// Paraméterek\ntype options struct {\n\tnaploFajl string\n\tsulyossag string\n}\n\nfunc NewCmd() *cobra.Command {\n\to := \u0026options{}\n\n\tcmd := \u0026cobra.Command{\n\t\tUse:   \"olvas\",\n\t\tShort: \"Naplóbejegyzések olvasása\",\n\t\tLong:  `Bizonyos sulyosságú bejegyzések olvasása napló fájlból`,\n\t\tRunE: func(cmd *cobra.Command, args []string) error {\n\t\t\treturn run(o)\n\t\t},\n\t}\n\n\t// Paraméterek beállítása\n\tcmd.Flags().StringVarP(\u0026o.naploFajl, \"naplo-fajl\", \"f\", \"./naplo.log\", \"Napló fájl elérési útja\")\n\tcmd.Flags().StringVarP(\u0026o.sulyossag, \"suly\", \"s\", \"INFO\", \"Berjegyzés súlyossága. Alapértelmezett: INFO. Lehetőségek: ERROR, WARN, INFO\")\n\n\treturn cmd\n}\n\nfunc run(o *options) error {\n\t// Súlyosságok\n\tsulyok := []string{\"ERROR\", \"INFO\", \"WARN\"}\n\n\t// Naplófájl paraméter ellenőrzése\n\tif o.naploFajl == \"\" {\n\t\terr := errors.New(\"nincs naplófájl megadva\")\n\t\treturn fmt.Errorf(\"%w\", err)\n\t}\n\n\t// Súlyosság paraméter ellenőrzése\n\tif !slices.Contains(sulyok, o.sulyossag) {\n\t\terr := errors.New(\"nem megfelelő súlyosság\")\n\t\treturn fmt.Errorf(\"%w: %s\", err, o.sulyossag)\n\t}\n\n\t// Napló olvasás függvény meghívása\n\tpkg.NaploOlvaso(o.naploFajl, o.sulyossag)\n\treturn nil\n}\n\n```\n\n6. Hozd, `cmd/naplo/naplo.go` fájlt:\n\n```go\npackage naplo\n\nimport (\n\t\"github.com/cloudsteak/trn-go-cli/cmd/naplo/ir\"\n\t\"github.com/cloudsteak/trn-go-cli/cmd/naplo/olvas\"\n\t\"github.com/spf13/cobra\"\n)\n\nfunc NewCmd() *cobra.Command {\n\tvar logCmd = \u0026cobra.Command{\n\t\tUse:           \"naplo\",\n\t\tShort:         \"Napló fájl olvasás és írás\",\n\t\tLong:          `Parancsok naplóbejegyzéseket tartalmazó fájlok olvasásához és írásához`,\n\t\tSilenceErrors: false,\n\t\tSilenceUsage:  false,\n\t}\n\t// Parancsok\n\tlogCmd.AddCommand(olvas.NewCmd())\n\tlogCmd.AddCommand(ir.NewCmd())\n\treturn logCmd\n}\n\n```\n\n7. Hozd, `cmd/root.go` fájlt:\n\n```go\npackage cmd\n\nimport (\n\t\"log\"\n\n\t\"github.com/cloudsteak/trn-go-cli/cmd/naplo\"\n\t\"github.com/spf13/cobra\"\n)\n\nvar appVersion bool\n\nvar rootCmd = \u0026cobra.Command{\n\tUse:           \"trn-go-cli\",\n\tShort:         \"Cli hasznos dolgoknak\",\n\tLong:          `Parancssori alkalmazás, hogy a hasznos dolgokat egyben kezelhessem`,\n\tSilenceErrors: false,\n\tSilenceUsage:  false,\n\tRun: func(cmd *cobra.Command, args []string) {\n\t\tif appVersion {\n\t\t\tlog.Printf(\"Verzió szám: %s\\n\", \"1.0.0\")\n\t\t}\n\t},\n}\n\nfunc Execute() {\n\tif err := rootCmd.Execute(); err != nil {\n\t\tlog.Fatal(err)\n\t}\n}\n\n// További parancsok, lehetőségek\nfunc init() {\n\trootCmd.Flags().BoolVarP(\u0026appVersion, \"verzio\", \"v\", false, \"Mutasd a verzió számot\")\n\trootCmd.AddCommand(naplo.NewCmd())\n}\n\n\n```\n\n8. Hozd létre a `main.go` fájlt a projekt gyökerében. A szerkesztőben a `main.go` fájlba illeszd bel az alábbi kódot:\n\n```go\npackage main\n\nimport (\n\t\"github.com/cloudsteak/trn-go-cli/cmd\"\n)\n\nfunc main() {\n\tcmd.Execute()\n}\n```\n\n9. Mentsd el.\n\n10. Tereminalban futtasd az alábbi parancsot:\n\n```bash\ngo get .\n```\n\n```bash\ngo run . -h\n```\n\n# Alkalmazás fordítása (build)\n\nHa szeretnénk az alkalmazásunkat máshol is futtatni, anélkül, hogy minden fejlesztői eszközt és függőséget telepíteni kellene, akkor azt egy csomagba le is tudjuk fordítani (build). Ehhez az alábbi parancsot kell futtatni: `go build`\n\nEredményképpen Windows-on egy exe fájlt kapunk, amit futtathatunk a Go fejlesztői környezewten kívül is.\n\n## Meglévő kód használata\n\n1. Terminalban belépek a projekt mappába\n2. Terminal-ban lefuttatom az alábbi parancsot:\n\n```bash\ngo get .\n```\n\n## Naplóbejegyzések hozzáadása a fájlhoz\n\nAdjunk hozzá néhány bejegyzést. Használjuk ehhez a fordított exe-t\n\n```bash\n./trn-go-cli.exe naplo ir -b \"Sikeresen bejelentkezett.\" -s \"INFO\"\n./trn-go-cli.exe naplo ir -b \"A keresett oldal nem található. Kérjük, ellenőrizze az URL-t, és próbálja meg újra.\" -s \"ERROR\"\n./trn-go-cli.exe naplo ir -b \"Sikeresen frissítette a felhasználói adatait.\" -s \"INFO\"\n./trn-go-cli.exe naplo ir -b \"Az akkumulátor töltöttsége alacsony. Kérjük, csatlakoztassa a készüléket egy töltőhöz.\" -s \"WARN\"\n./trn-go-cli.exe naplo ir -b \"Az Ön munkamenete lejárt. Kérjük, jelentkezzen be újra a folytatáshoz.\" -s \"WARN\"\n./trn-go-cli.exe naplo ir -b \"Váratlan rendszerhiba történt. Próbálkozzon újra később, vagy lépjen kapcsolatba a támogatással.\" -s \"ERROR\"\n./trn-go-cli.exe naplo ir -b \"Sikeresen elfogadta a szerződési feltételeket. Most már hozzáférhet az alkalmazás teljes funkcionalitásához.\" -s \"INFO\"\n./trn-go-cli.exe naplo ir -b \"Nem sikerült kapcsolódni a szerverhez. Kérjük, ellenőrizze internetkapcsolatát és próbálja újra.\" -s \"ERROR\"\n./trn-go-cli.exe naplo ir -b \"Az alkalmazás használatához frissítse a licencét.\" -s \"WARN\"\n./trn-go-cli.exe naplo ir -b \"A tranzakció sikeresen megtörtént. Köszönjük a vásárlást\" -s \"INFO\"\n./trn-go-cli.exe naplo ir -b \"Sikeresen kijelentkezett. Várjuk vissza\" -s INFO\n```\n\n## Naplóbejegyzések olvasása a fájlból\n\n### INFO\n\n```bash\n./trn-go-cli.exe naplo olvas -s \"INFO\"\n```\n\n### WARN\n\n```bash\n./trn-go-cli.exe naplo olvas -s \"WARN\"\n```\n\n### ERROR\n\n```bash\n./trn-go-cli.exe naplo olvas -s \"ERROR\"\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcloudsteak%2Ftrn-go-cli","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcloudsteak%2Ftrn-go-cli","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcloudsteak%2Ftrn-go-cli/lists"}