{"id":21258076,"url":"https://github.com/cuongndc9/fly-with-go","last_synced_at":"2025-07-11T02:32:21.536Z","repository":{"id":116045426,"uuid":"231216361","full_name":"cuongndc9/fly-with-go","owner":"cuongndc9","description":"🐹 go is the programming language I want to 🛶 conquer next 🌍.","archived":false,"fork":false,"pushed_at":"2020-10-15T01:59:06.000Z","size":7142,"stargazers_count":32,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"master","last_synced_at":"2024-10-23T23:15:35.554Z","etag":null,"topics":["103cuong","4pet","4pet-social","fly","go","golang","hacktoberfest","node","nodejs","roadmap","tutorial"],"latest_commit_sha":null,"homepage":"","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/cuongndc9.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","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}},"created_at":"2020-01-01T12:54:31.000Z","updated_at":"2024-04-02T17:42:42.000Z","dependencies_parsed_at":"2024-03-05T08:59:37.359Z","dependency_job_id":"2c6b3c4c-98fb-4ccb-ae6d-abad27634d0e","html_url":"https://github.com/cuongndc9/fly-with-go","commit_stats":null,"previous_names":["cuonginspire/fly-with-go","cuongnd9/fly-with-go","cuongw/fly-with-go","cuongndc9/fly-with-go"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cuongndc9%2Ffly-with-go","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cuongndc9%2Ffly-with-go/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cuongndc9%2Ffly-with-go/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cuongndc9%2Ffly-with-go/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/cuongndc9","download_url":"https://codeload.github.com/cuongndc9/fly-with-go/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":225669505,"owners_count":17505386,"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":["103cuong","4pet","4pet-social","fly","go","golang","hacktoberfest","node","nodejs","roadmap","tutorial"],"created_at":"2024-11-21T04:07:04.626Z","updated_at":"2025-07-11T02:32:21.529Z","avatar_url":"https://github.com/cuongndc9.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"### 🐹 go is the programming language I want to 🛶 conquer next 🌍.\n\n\u003cimg align=\"right\" width=\"100\" height=\"100\" src=\"./images/go.gif\"\u003e\n\n\u003e **🦄 why Go?**\n\n\u003e I have been using Node for a long time. Node is best but not perfect. Go will be a good complement to Node's weaknesses. You can read [this article](https://medium.com/@kevalpatel2106/why-should-you-learn-go-f607681fad65) to understand why I choose to Go.\n\n\u003ch2 id=\"home\"\u003e🏷️ contents\u003c/h2\u003e\n\n- #### [🛴 basic](#basic)\n  - ##### [🖨️ printing](#printing)\n  - ##### [🔫 function](#function)\n  - ##### [🌳 variable](#variable)\n  - ##### [🥚 basic types](#basic-types)\n  - ##### [🚂 type conversion](#type-conversion)\n  - ##### [🍭 loop](#loop)\n  - ##### [👻 conditional statement](#conditional-statement)\n  - ##### [🎣 defer](#defer)\n  - ##### [🏹 pointer](#pointer)\n  - ##### [📦 struct](#struct)\n  - ##### [🚥 array](#array)\n  - ##### [🎢 slices](#slices)\n  - ##### [🎯 maps](#maps)\n  - ##### [💩 function closures](#function-closures)\n- #### [🚀 advanced](#advanced)\n\t- ##### [💉 methods](#methods)\n\t- ##### [⛩️ interfaces](#interfaces)\n\t- ##### [🏭 goroutines](#goroutines)\n- #### [📙 documents](#documents)\n- #### [🚧 license](#license)\n\n\u003ch2 id=\"basic\"\u003e🛴 basic\u003c/h2\u003e\n\n\u003ch3 id=\"printing\"\u003e🖨️ printing\u003c/h3\u003e\n\n```go\npackage main\n\nimport (\n  \"fmt\"\n  \"math\"\n)\n\nfunc main() {\n  fmt.Printf(\"Hello %s\", \"🐹 Go\")\n  fmt.Println(math.Pi)\n}\n```\n\n**[⬆️ back to top](#home)**\n\n\u003ch3 id=\"function\"\u003e🔫 function\u003c/h3\u003e\n\n```go\npackage main\n\nimport \"fmt\"\n\nfunc add(a int, b int) int {\n  return a + b\n}\n\nfunc subtract(a, b int) int {\n  return a - b\n}\n\nfunc swap(a, b int) (int, int) {\n  return b, a\n}\n\n// named return values\nfunc split(number int) (a, b int) {\n\ta = number / 10\n\tb = number % 10\n\treturn\n}\n\nfunc main() {\n  fmt.Println(add(6,9)) // 15\n  fmt.Println(subtract(17, 10)) // 7\n  a, b := swap(10, 17)\n  fmt.Println(a, b) // 17 10\n  fmt.Println(split(19)) // 1 9\n}\n```\n\n**[⬆️ back to top](#home)**\n\n\u003ch3 id=\"variable\"\u003e🌳 variable\u003c/h3\u003e\n\n```go\npackage main\n\nimport \"fmt\"\n\n// global variables\nvar canFly bool\nvar age int = 21\n\nfunc main() {\n  // explict\n  var name string = \"Cuong Duy Tran Nguyen\"\n  // inferred\n  var job, address = \"Software Engineer\", \"Ho Chi Minh city\"\n  // shorthand\n  gender := \"male\"\n  // constant\n  const homeTown = \"Tam Ky city, Quang Nam province\"\n\tfmt.Println(canFly, name, age, job, address, gender, homeTown)\n}\n```\n\n**[⬆️ back to top](#home)**\n\n\u003ch3 id=\"basic-types\"\u003e🥚 basic types\u003c/h3\u003e\n\n```\nbool\n\nstring\n\nint  int8  int16  int32  int64\nuint uint8 uint16 uint32 uint64 uintptr\n\nbyte // alias for uint8\n\nrune // alias for int32\n     // represents a Unicode code point\n\nfloat32 float64\n\ncomplex64 complex128\n```\n\n```go\npackage main\n\nimport \"fmt\"\n\nfunc main() {\n\tvar (\n\t\tname string = \"Cuong Duy Nguyen\"\n\t\tage int = 21\n\t)\n\tfmt.Printf(\"type: %T, value: %v\n\", name, name)\n\tfmt.Printf(\"type: %T, value: %v\n\", age, age)\n}\n```\n\n**[⬆️ back to top](#home)**\n\n\u003ch3 id=\"type-conversion\"\u003e🚂 type conversion\u003c/h3\u003e\n\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\t\"math\"\n)\n\nfunc main() {\n\tvar z uint = uint(math.Sqrt(64))\n\tvar i int = 7\n\tvar f float64 = float64(i)\n\tfmt.Print(z, i, f)\n}\n```\n\n**[⬆️ back to top](#home)**\n\n\u003ch3 id=\"loop\"\u003e🍭 loop\u003c/h3\u003e\n\n```go\npackage main\n\nimport \"fmt\"\n\nfunc main() {\n\tfor i := 0; i \u003c 7; i++ {\n\t\tfmt.Println(i)\n  }\n  // for continued\n  max := 0\n\tfor ; max \u003c 7777 ; {\n\t\tmax += 7\n\t}\n  fmt.Println(max)\n  // while\n  sum := 0\n\tfor sum \u003c 777 {\n\t\tsum += 7\n\t}\n  fmt.Println(sum)\n  // forever\n  for {\n\t\tfmt.Println(\"go\")\n\t}\n}\n```\n\n**[⬆️ back to top](#home)**\n\n\u003ch3 id=\"conditional-statement\"\u003e👻 conditional statement\u003c/h3\u003e\n\n```go\npackage main\n\nimport (\n  \"fmt\"\n  \"runtime\"\n  \"time\"\n)\n\nfunc compare(x, y int) (z string) {\n\tif x \u003e y {\n\t\tz = \"x is greater than y\"\n\t} else {\n\t\tz = \"x is smaller than y\"\n\t}\n\treturn\n}\n\nfunc isEven(number int) bool {\n\tif num := number % 2; num == 0 {\n\t\treturn true\n\t}\n\treturn false\n}\n\n// switch case\nfunc checkOS() string {\n\tswitch os := runtime.GOOS; os {\n\t\tcase \"linux\":\n\t\t\treturn \"🐧 Linux\"\n\t\tcase \"darwin\":\n\t\t\treturn \"🌌 macOS\"\n\t\tdefault:\n\t\t\treturn os\n\t}\n}\n// switch case without condition\nfunc showGreeter() string {\n\th := time.Now().Hour()\n\tswitch {\n\t\tcase h \u003c 12:\n\t\t\treturn \"good morning\"\n\t\tcase h \u003c 17:\n\t\t\treturn \"good afternoon\"\n\t\tdefault:\n\t\t\treturn \"good evening\"\n\t}\n}\n\nfunc main() {\n\tt := compare(6, 7)\n  fmt.Println(t)\n  fmt.Print(isEven(7))\n  fmt.Print(checkOS())\n  fmt.Println(showGreeter())\n}\n```\n\n**[⬆️ back to top](#home)**\n\n\u003ch3 id=\"defer\"\u003e🎣 defer\u003c/h3\u003e\n\n\u003e A defer statement defers the execution of a function until the surrounding function returns.\n\n\u003e Deferred function calls are pushed onto a stack. When a function returns, its deferred calls are executed in last-in-first-out order.\n\n```go\npackage main\n\nimport \"fmt\"\n\nfunc main() {\n\tfmt.Print(\"counting \")\n\n\tfor i := 0; i \u003c 10; i++ {\n\t\tdefer fmt.Printf(\"%d \", i)\n\t}\n\n  fmt.Print(\"done \")\n  // counting done 9 8 7 6 5 4 3 2 1 0\n}\n```\n\n**[⬆️ back to top](#home)**\n\n\u003ch3 id=\"pointer\"\u003e🏹 pointer\u003c/h3\u003e\n\n```go\npackage main\n\nimport \"fmt\"\n\nfunc main() {\n\ti, j := 10, 50\n\ta := \u0026i\n\tfmt.Println(a, *a)\n\t*a = 17\n\tfmt.Println(a, *a, i)\n\tvar b *int = \u0026j\n\tfmt.Println(b, *b)\n\ta = b\n\tfmt.Println(*a, *b)\n}\n```\n\n**[⬆️ back to top](#home)**\n\n\u003ch3 id=\"struct\"\u003e📦 struct\u003c/h3\u003e\n\n```go\npackage main\n\nimport \"fmt\"\n\ntype Point struct {\n\tx int\n\ty int\n}\n\nfunc main() {\n\t// basic struct\n\tp := Point{6, 9}\n\tfmt.Println(p, p.x, p.y)\n\tp.x = 1\n\tp.y = 7\n\tfmt.Println(p, p.x, p.y)\n\n\t// struct with pointer\n\tvar a *Point = \u0026p\n\tfmt.Println(a, *a)\n\tfmt.Println(a.x, (*a).x) // the same result\n\n\t// init struct\n\tvar (\n\t\tv1 = Point{1, 2}  // has type Point\n\t\tv2 = Point{x: 1}  // Y:0 is implicit\n\t\tv3 = Point{}      // X:0 and Y:0\n\t\tk  = \u0026Point{1, 2} // has type *Point\n\t)\n\tfmt.Println(v1, k, v2, v3)\n}\n```\n\n**[⬆️ back to top](#home)**\n\n\u003ch3 id=\"array\"\u003e🚥 array\u003c/h3\u003e\n\n```go\npackage main\n\nimport \"fmt\"\n\nfunc main() {\n\tvar list [7]int\n\tlist[0] = 7\n\tfmt.Println(list, list[1]) // [7 0 0 0 0 0 0] 0\n\t\n\toddNumbers := [3]int{3, 5}\n\toddNumbers[2] = 7\n\tfmt.Println(oddNumbers) // [3 5 7]\n\t\n\tvar fullName [3]string = [3]string{\"Cuong\", \"Duy\", \"Nguyen\"}\n\tfmt.Println(fullName) // [Cuong Duy Nguyen]\n}\n```\n\n**[⬆️ back to top](#home)**\n\n\u003ch3 id=\"slices\"\u003e🎢 slices\u003c/h3\u003e\n\n```go\npackage main\n\nimport \"fmt\"\n\nfunc main() {\n\t// 1. basic slice\n\ta := []int{1, 2, 3, 5, 6, 7, 8, 9, 10}\n\ta = a[:7]\n\tfmt.Println(a) // [1 2 3 5 6 7 8]\n\n\t// 2. slices are like references to arrays\n\tpets := []string{\"cat\", \"dog\", \"bird\", \"fish\"}\n\tfmt.Println(pets) // [cat dog bird fish]\n\tlist := pets[0:2]\n\tfmt.Println(list) // [cat dog]\n\tlist[1] = \"pig\"\n\tfmt.Println(list) // [cat pig]\n\tfmt.Println(pets) // [cat pig bird fish]\n\n\t// 3. slice length \u0026 capacity\n\t// The capacity of a slice is the number of elements in the underlying array, counting from the first element in the slice.\n\ts := []int{2, 3, 5, 7, 11, 13}\n\tfmt.Printf(\"len=%d cap=%d %v\n\", len(s), cap(s), s)\n\t// len=6 cap=6 [2 3 5 7 11 13]\n\n\t// 4. slice the slice to give it zero length.\n\ts = s[:1]\n\tfmt.Printf(\"len=%d cap=%d %v\n\", len(s), cap(s), s)\n\t// len=1 cap=6 [2]\n\n\t// Extend its length.\n\ts = s[:2]\n\tfmt.Printf(\"len=%d cap=%d %v\n\", len(s), cap(s), s)\n\t// len=2 cap=6 [2 3]\n\n\t// Drop its first two values.\n\ts = s[2:]\n\tfmt.Printf(\"len=%d cap=%d %v\n\", len(s), cap(s), s)\n\t// len=0 cap=4 []\n\n\ts = s[:4]\n\tfmt.Printf(\"len=%d cap=%d %v\n\", len(s), cap(s), s)\n\t// len=4 cap=4 [5 7 11 13]\n\n\t// 5. nil slices\n\t// A nil slice has a length and capacity of 0 and has no underlying array.\n\tvar t []int\n\tfmt.Println(t, len(t), cap(t)) // [] 0 0\n\tif t == nil {\n\t\tfmt.Println(\"nil!\") // nil!\n\t}\n\n\t// 6. Creating a slice with make\n\tx := make([]int, 10)\n\tfmt.Printf(\"%d %d %v \n\", len(x), cap(x), x)\n\t// 10 10 [0 0 0 0 0 0 0 0 0 0]\n\n\ty := make([]int, 0, 5)\n\tfmt.Printf(\"%d %d %v \n\", len(y), cap(y), y)\n\t// 0 5 []\n\n\tz := y[:5]\n\tfmt.Printf(\"%d %d %v \n\", len(z), cap(z), z)\n\t// 5 5 [0 0 0 0 0]\n\n\t// 7. Appending to a slice\n\t// cap will auto scale up depend on the added elements\n\tm := []int{}\n\tfmt.Printf(\"len=%d cap=%d %v\n\", len(m), cap(m), m)\n\t// len=0 cap=0 []\n\n\tm = append(m, 6, 5)\n\tfmt.Printf(\"len=%d cap=%d %v\n\", len(m), cap(m), m)\n\t// len=2 cap=2 [6 5]\n\n\tm = append(m, 1, 2, 5, 6, 8, 9, 3)\n\tfmt.Printf(\"len=%d cap=%d %v\n\", len(m), cap(m), m)\n\t// len=9 cap=10 [6 5 1 2 5 6 8 9 3]\n\n\t// 8. range\n\t// contain i(index) \u0026 v(clone value)\n\tvar numbers []int = []int{1, 3, 7, 8}\n\tfor i, v := range numbers {\n\t\tfmt.Println(i, v)\n\t}\n\t// 0 1\n\t// 1 3\n\t// 2 7\n\t// 3 8\n\n\t// skip the index or value by assigning to _\n}\n\n```\n\n**[⬆️ back to top](#home)**\n\n\u003ch3 id=\"maps\"\u003e🎯 maps\u003c/h3\u003e\n\n```go\npackage main\n\nimport \"fmt\"\n\ntype Point struct {\n\tX, Y int\n}\n\nfunc main() {\n\t// 1. Basic\n\tvar m map[string]Point = make(map[string]Point)\n\tfmt.Printf(\"%v \n\", m) // map[]\n\tm[\"L\"] = Point{6, 9}\n\tm[\"T\"] = Point{0, 1}\n\tfmt.Printf(\"%v %v \n\", m, m[\"T\"]) // map[L:{6 9} T:{0 1}] {0 1}\n\n\t// 2. Map literals\n\tt := map[string]Point{\n\t\t\"foo\": Point{3, 1},\n\t\t\"bar\": Point {5, 6},\n\t\t\"taz\": {10, 20}, // shorthand Struct\n\t}\n\tfmt.Printf(\"%v \n\", t)// map[bar:{5 6} foo:{3 1}]\n\n\t// 3. Mutating maps\n\tlist := map[int]int {\n\t\t1: 10,\n\t\t2: 100,\n\t\t3: 1000,\n\t}\n\tfmt.Printf(\"%v\n\", list) // map[1:10 2:100 3:1000]\n\t// insert an element\n\tlist[4] = 10000\n\tfmt.Printf(\"%v\n\", list) // map[1:10 2:100 3:1000 4:10000]\n\t// delete an element\n\tdelete(list, 4)\n\tfmt.Printf(\"%v\n\", list) // map[1:10 2:100 3:1000]\n\t// test that a key is present\n\telem, ok := list[4]\n\tfmt.Println(elem, ok) // 0 false\n}\n```\n\n**[⬆️ back to top](#home)**\n\n\u003ch3 id=\"function-closures\"\u003e💩 function closures\u003c/h3\u003e\n\n```go\npackage main\n\nimport \"fmt\"\n\nfunc add(x int) func(int) int {\n\treturn func(y int) int {\n\t\treturn x + y\n\t}\n}\n\nfunc main() {\n\tvalue := add(3)(4)\n\tfmt.Println(value) // 7\n}\n```\n\n**[⬆️ back to top](#home)**\n\n\u003ch2 id=\"advanced\"\u003e🚀 advanced\u003c/h2\u003e\n\n\u003ch3 id=\"methods\"\u003e💉 methods\u003c/h3\u003e\n\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\t\"time\"\n)\n\ntype User struct {\n\tname string\n\tdob int\n}\n\nfunc (u User) age() int {\n\tu.name = \"💎\"\n\treturn time.Now().Year() - u.dob\n}\n\n// Using pointer to modify struct's methods\nfunc (u *User) changeName(name string) {\n\tu.name = name\n}\n\nfunc main() {\n\tuser := User{\"Cuong Duy Nguyen\", 1998}\n\tfmt.Println(user.age()) // 22\n\tfmt.Println(user.name) // Cuong Duy Nguyen * not modify\n\tuser.changeName(\"Nguyễn Duy Cương\")\n\tfmt.Println(user.name) // Nguyễn Duy Cương * modify\n}\n```\n\n**[⬆️ back to top](#home)**\n\n\u003ch3 id=\"interfaces\"\u003e⛩️ interfaces\u003c/h3\u003e\n\n```go\npackage main\n\nimport \"fmt\"\n\ntype Animal struct {\n\tname, color string\n}\n\nfunc (animal Animal) Miaow() {\n\tfmt.Printf(\"meow moew %s\", animal.name)\n}\n\ntype Cat interface {\n\tMiaow()\n}\n\nfunc main() {\n\tvar cat Cat = Animal{\"Dog\", \"black\"}\n\tcat.Miaow()\n}\n```\n\n**[⬆️ back to top](#home)**\n\n\u003ch3 id=\"goroutines\"\u003e🏭 goroutines\u003c/h3\u003e\n\n```go\npackage main\n\nimport \"fmt\"\n\nfunc sum(c chan int, s []int) {\n\tsum := 0\n\tfor _, v := range s {\n\t\tsum += v\n\t}\n\tc \u003c- sum\n}\n\nfunc main() {\n\ts := []int{1, 5, 2, 8}\n\tc := make(chan int, 5) // initialize number of channels.\n\tgo sum(c, s[:len(s) / 2])\n\tgo sum(c, s[len(s) / 2:])\n\tx, y := \u003c- c, \u003c- c\n\tfmt.Println(x, y, x + y) // 10 6 16\n}\n```\n\n**[⬆️ back to top](#home)**\n\n\u003ch2 id=\"documents\"\u003e📙 documents\u003c/h2\u003e\n\n- #### 🦊 [golang.org](https://golang.org/)\n\n- #### 🦌 [A Tour of Go](https://tour.golang.org)\n\n- #### 🐧 [Golang for Node.js Developers](https://github.com/miguelmota/golang-for-nodejs-developers)\n\n- #### 🐠 [Golang Tutorial  from zero to hero](https://milapneupane.com.np/2019/07/06/learning-golang-from-zero-to-hero/)\n\n- #### 🐳 [Go Cheat Sheet](https://github.com/a8m/golang-cheat-sheet)\n\n\u003ch2\u003e🚧 license\u003c/h2\u003e\n\nMIT © [Cuong Nguyen](https://www.linkedin.com/in/cuongndc9)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcuongndc9%2Ffly-with-go","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcuongndc9%2Ffly-with-go","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcuongndc9%2Ffly-with-go/lists"}