{"id":18780940,"url":"https://github.com/walchand-linux-users-group/metamorphosis_2k24_go_project","last_synced_at":"2025-12-19T04:30:16.400Z","repository":{"id":250087623,"uuid":"776494692","full_name":"Walchand-Linux-Users-Group/Metamorphosis_2k24_Go_Project","owner":"Walchand-Linux-Users-Group","description":"A command line application to manage student","archived":false,"fork":false,"pushed_at":"2024-07-25T04:01:07.000Z","size":7,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-01-06T05:32:45.153Z","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":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Walchand-Linux-Users-Group.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":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-03-23T17:03:38.000Z","updated_at":"2024-07-25T04:01:56.000Z","dependencies_parsed_at":"2024-07-25T05:21:38.935Z","dependency_job_id":null,"html_url":"https://github.com/Walchand-Linux-Users-Group/Metamorphosis_2k24_Go_Project","commit_stats":null,"previous_names":["walchand-linux-users-group/meta_2k24_go_project"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Walchand-Linux-Users-Group%2FMetamorphosis_2k24_Go_Project","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Walchand-Linux-Users-Group%2FMetamorphosis_2k24_Go_Project/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Walchand-Linux-Users-Group%2FMetamorphosis_2k24_Go_Project/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Walchand-Linux-Users-Group%2FMetamorphosis_2k24_Go_Project/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Walchand-Linux-Users-Group","download_url":"https://codeload.github.com/Walchand-Linux-Users-Group/Metamorphosis_2k24_Go_Project/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":239698601,"owners_count":19682532,"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":"2024-11-07T20:28:49.194Z","updated_at":"2025-12-19T04:30:16.322Z","avatar_url":"https://github.com/Walchand-Linux-Users-Group.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Metamorphosis 2k24: GoLang Project\n\n### Folder Structure\n\n```bash\nStudent-DB\n├── main.go\n├── db.txt\n└── features\n    └── features.go\n```\n---\n\n### main.go starter code\n\n```go \npackage main\n\nimport (\n  \"fmt\"\n)\n\nfunc main() {\n  fmt.Println(\"Hello, World!\")\n}\n\n```\n---\n\n### features.go \n\n#### Structs\n\n```go\npackage features\n\n//Note these are final dependencies and if they give any error just comment unused ones for time being.\nimport (\n\t\"bufio\"\n\t\"fmt\"\n\t\"os\"\n\t\"strconv\"\n\t\"strings\"\n)\n\n\ntype Student struct {\n\tName   string\n\tRollNo string\n\tMarks  int\n}\n\ntype Class struct {\n\tEngineers []Student\n}\n\n```\n---\n\n#### Taking input from user\n  \n  ```go\n  func inputName() string {\n\tfmt.Println(\"Enter your first name\")\n\tvar name string\n\tfmt.Scanln(\u0026name)\n\treturn name\n}\n\nfunc inputRoll() string {\n\tfmt.Println(\"Enter your roll no\")\n\tvar roll string\n\tfmt.Scanln(\u0026roll)\n\treturn roll\n}\n\nfunc inputMarks() int {\n\tfmt.Println(\"Enter your marks\")\n\tvar marks int\n\tfmt.Scanln(\u0026marks)\n\treturn marks\n}\n```\n--- \n\n#### New Class Function\n\n```go\nfunc (c *Class) NewClass() {\n\n\t// fmt.Println(entry)\n\tvar studentsArray []Student\n\tfile, err := os.Open(\"db.txt\")\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tscanner := bufio.NewScanner(file)\n\n\tfor scanner.Scan() {\n\t\tline := scanner.Text()\n\t\tfields := strings.Split(line, \" \")\n\t\tmarks, _ := strconv.Atoi(fields[2])\n\n\t\tentry := Student{\n\t\t\tName:   fields[0],\n\t\t\tRollNo: fields[1],\n\t\t\tMarks:  marks,\n\t\t}\n\n\t\tstudentsArray = append(studentsArray, entry)\n\n\t}\n\n\t// fmt.Println(studentsArray)\n\tc.Engineers = studentsArray\n\n}\n```\n---\n\n#### Add Student Function\n\n```go\nfunc (c *Class) AddStudent() {\n\n\tname := inputName()\n\n\troll := inputRoll()\n\n\tmarks := inputMarks()\n\n\tentry := Student{\n\t\tName:   name,\n\t\tRollNo: roll,\n\t\tMarks:  marks,\n\t}\n\n\tc.Engineers = append(c.Engineers, entry)\n\n\tfmt.Println(\"Student Added Successfully\")\n\tfmt.Println()\n\n\t//Update this data in the db.txt\n}\n```\n---\n\n#### Show Students Function\n\n```go\nfunc (c *Class) ShowStudents() {\n\tfor _, student := range c.Engineers {\n\t\tname, roll, marks := student.Name, student.RollNo, student.Marks\n\t\tfmt.Printf(\"Name: %s\\nRoll No: %s\\nMarks: %d\\n\", name, roll, marks)\n\t\tfmt.Println()\n\t}\n}\n```\n---\n\n#### Update Student Function\n\n```go\nfunc (c *Class) UpdateStudent() {\n\n\troll := inputRoll()\n\t// find the student\n\tindex := 0\n\tfor ind, stu := range c.Engineers {\n\t\tif stu.RollNo == roll {\n\t\t\tindex = ind\n\t\t\tbreak\n\t\t}\n\t}\n\t// get the data\n\tnewName := inputName()\n\tnewMarks := inputMarks()\n\t// change the data\n\n\tc.Engineers[index] = Student{\n\t\tRollNo: roll,\n\t\tName:   newName,\n\t\tMarks:  newMarks,\n\t}\n}\n\n```\n---\n#### Delete Student Function\n```go\nfunc (c *Class) DeleteStudent() {\n\n\t// get the data\n\troll := inputRoll()\n\tindex := 0\n\n\t// find the index\n\tfor idx, student := range c.Engineers {\n\t\tif student.RollNo == roll {\n\t\t\tindex = idx\n\t\t}\n\t}\n\n\t// remove the student\n\tc.Engineers = append(c.Engineers[:index], c.Engineers[index+1:]...)\n}\n```\n---\n#### Write To File Function\n```go\nfunc (c *Class) writeToFile(wg *sync.WaitGroup) {\n\n\t// convert []Student into string\n\tvar result []string\n\n\tfor _, val := range c.Engineers {\n\t\tcurrent := fmt.Sprintf(\"%v %v %v\", val.Name, val.RollNo, val.Marks)\n\t\tresult = append(result, current)\n\t}\n\n\n\terr := os.WriteFile(\"db.txt\", []byte(strings.Join(result, \"\\n\")), 0644)\n\tif err != nil {\n\t\tfmt.Println(err.Error())\n\t}\n}\n```\n---\n#### Final main.go\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\t\"os\"\n\tfeatures \"student-db/Features\"\n)\n\nfunc displayChoices() {\n\tfmt.Println(\"Select one of the choices\")\n\tfmt.Println(\"1. Add a new Student\")\n\tfmt.Println(\"2. Show all Students\")\n\tfmt.Println(\"3. Update Student\")\n\tfmt.Println(\"4. Delete Student\")\n\tfmt.Println(\"5. Exit\")\n}\n\nfunc main() {\n\tfmt.Println(\"Welcome to student DB\")\n\tvar class features.Class\n\tclass.NewClass()\n\n\tfor {\n\t\tdisplayChoices()\n\t\tvar choice int\n\t\tfmt.Scanln(\u0026choice)\n\n\t\tswitch choice {\n\t\tcase 1:\n\t\t\tclass.AddStudent()\n\t\tcase 2:\n\t\t\tclass.ShowStudents()\n\t\tcase 3:\n\t\t\tclass.UpdateStudent()\n\t\tcase 4:\n\t\t\tclass.DeleteStudent()\n\t\tcase 5:\n\t\t\tos.Exit(0)\n\t\tdefault:\n\t\t\tfmt.Println(\"Invalid choice\")\n\t\t}\n\t}\n\n}\n\n```\n---\n#### Final features.go\n```go\npackage features\n\n//Note these are final dependencies and if they give any erro just comment unused ones for time being.\nimport (\n\t\"bufio\"\n\t\"fmt\"\n\t\"os\"\n\t\"strconv\"\n\t\"strings\"\n\t\"sync\"\n)\n\ntype Student struct {\n\tName   string\n\tRollNo string\n\tMarks  int\n}\n\ntype Class struct {\n\tEngineers []Student\n}\n\nfunc inputName() string {\n\tfmt.Println(\"Enter your first name\")\n\tvar name string\n\tfmt.Scanln(\u0026name)\n\treturn name\n}\n\nfunc inputRoll() string {\n\tfmt.Println(\"Enter your roll no\")\n\tvar roll string\n\tfmt.Scanln(\u0026roll)\n\treturn roll\n}\n\nfunc inputMarks() int {\n\tfmt.Println(\"Enter your marks\")\n\tvar marks int\n\tfmt.Scanln(\u0026marks)\n\treturn marks\n}\n\nfunc (c *Class) NewClass() {\n\n\t// fmt.Println(entry)\n\tvar studentsArray []Student\n\tfile, err := os.Open(\"db.txt\")\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tscanner := bufio.NewScanner(file)\n\n\tfor scanner.Scan() {\n\t\tline := scanner.Text()\n\t\tfields := strings.Split(line, \" \")\n\t\tmarks, _ := strconv.Atoi(fields[2])\n\n\t\tentry := Student{\n\t\t\tName:   fields[0],\n\t\t\tRollNo: fields[1],\n\t\t\tMarks:  marks,\n\t\t}\n\n\t\tstudentsArray = append(studentsArray, entry)\n\n\t}\n\n\t// fmt.Println(studentsArray)\n\tc.Engineers = studentsArray\n\n}\n\nfunc (c *Class) AddStudent() {\n\n\tname := inputName()\n\n\troll := inputRoll()\n\n\tmarks := inputMarks()\n\n\tentry := Student{\n\t\tName:   name,\n\t\tRollNo: roll,\n\t\tMarks:  marks,\n\t}\n\n\tc.Engineers = append(c.Engineers, entry)\n\n\tfmt.Println(\"Student Added Successfully\")\n\tfmt.Println()\n\n\t//Update this data in the db.txt\n}\n\nfunc (c *Class) ShowStudents() {\n\tfor _, student := range c.Engineers {\n\t\tname, roll, marks := student.Name, student.RollNo, student.Marks\n\t\tfmt.Printf(\"Name: %s\\nRoll No: %s\\nMarks: %d\\n\", name, roll, marks)\n\t\tfmt.Println()\n\t}\n}\n\nfunc (c *Class) UpdateStudent() {\n\n\troll := inputRoll()\n\t// find the student\n\tindex := 0\n\n\tfor ind, stu := range c.Engineers {\n\t\tif stu.RollNo == roll {\n\t\t\tindex = ind\n\t\t\tbreak\n\t\t}\n\t}\n\t\n\t// get the data\n\tnewName := inputName()\n\tnewMarks := inputMarks()\n\t// change the data\n\n\tc.Engineers[index] = Student{\n\t\tRollNo: roll,\n\t\tName:   newName,\n\t\tMarks:  newMarks,\n\t}\n}\n\nfunc (c *Class) DeleteStudent() {\n\n\t// get the data\n\troll := inputRoll()\n\tindex := 0\n\n\t// find the index\n\tfor idx, student := range c.Engineers {\n\t\tif student.RollNo == roll {\n\t\t\tindex = idx\n\t\t}\n\t}\n\n\t// remove the student\n\tc.Engineers = append(c.Engineers[:index], c.Engineers[index+1:]...)\n}\n\nfunc (c *Class) writeToFile(wg *sync.WaitGroup) {\n\n\t// convert []Student into string\n\tvar result []string\n\n\tfor _, val := range c.Engineers {\n\t\tcurrent := fmt.Sprintf(\"%v %v %v\", val.Name, val.RollNo, val.Marks)\n\t\tresult = append(result, current)\n\t}\n\n\terr := os.WriteFile(\"db.txt\", []byte(strings.Join(result, \"\\n\")), 0644)\n\tif err != nil {\n\t\tfmt.Println(err.Error())\n\t}\n}\n\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwalchand-linux-users-group%2Fmetamorphosis_2k24_go_project","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwalchand-linux-users-group%2Fmetamorphosis_2k24_go_project","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwalchand-linux-users-group%2Fmetamorphosis_2k24_go_project/lists"}