├── go.mod ├── 01. Get Started └── main.go ├── 15.Closures └── main.go ├── 16.Recursion └── main.go ├── 11.Range └── main.go ├── 12.Func └── main.go ├── 18.Strings and Runes └── main.go ├── 14.Variadic Functions └── main.go ├── 17.Pointers └── main.go ├── .github ├── ISSUE_TEMPLATE │ ├── bug_report.md │ └── feature_request.md ├── FUNDING.yml └── COMMIT_CONVENTION.md ├── 20.Methods └── main.go ├── .vscode └── settings.json ├── 04. Constants └── main.go ├── 25.Goroutines └── main.go ├── 19.Structs └── main.go ├── 23.Struct Embedding └── main.go ├── 22.Enums └── main.go ├── 02. Values └── main.go ├── 03. Variables └── main.go ├── 13.Multiple Return Values └── main.go ├── 05. for └── main.go ├── 24.Errors └── main.go ├── 10.Map └── main.go ├── 06. If-Else └── main.go ├── 21.Interfaces └── main.go ├── 26.Channels └── main.go ├── 09.Slices └── main.go ├── note.txt ├── 07. Switch └── main.go ├── 08. Arrays └── main.go ├── README.md └── SECURITY.md /go.mod: -------------------------------------------------------------------------------- 1 | module Learn_Go 2 | 3 | go 1.21.3 4 | -------------------------------------------------------------------------------- /01. Get Started/main.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import "fmt" 4 | 5 | func main() { 6 | fmt.Println("Hi Tai Dev!") 7 | } 8 | -------------------------------------------------------------------------------- /15.Closures/main.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import "fmt" 4 | 5 | func main() { 6 | square := func(num int) int { 7 | return num * num 8 | } 9 | 10 | fmt.Println("Bình phương của 5:", square(5)) 11 | } 12 | -------------------------------------------------------------------------------- /16.Recursion/main.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import "fmt" 4 | 5 | func sum(n int) int { 6 | if n == 0 { 7 | return 0 8 | } 9 | return n + sum(n-1) 10 | } 11 | 12 | func main() { 13 | fmt.Println("Tổng của các số từ 1 đến 5 là:", sum(5)) 14 | } 15 | -------------------------------------------------------------------------------- /11.Range/main.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import "fmt" 4 | 5 | func main() { 6 | subjects := []string{"Math", "Science", "English", "History"} 7 | 8 | for index, subject := range subjects { 9 | fmt.Printf("Môn học %d: %s\n", index+1, subject) 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /12.Func/main.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import "fmt" 4 | 5 | func rectangleArea(length, width float64) float64 { 6 | return length * width 7 | } 8 | 9 | func main() { 10 | area := rectangleArea(5.5, 3.0) 11 | fmt.Println("Diện tích hình chữ nhật là:", area) 12 | } 13 | -------------------------------------------------------------------------------- /18.Strings and Runes/main.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import "fmt" 4 | 5 | func main() { 6 | str := "Nguyen Tien Tai!" 7 | 8 | for _, char := range str { 9 | fmt.Printf("%c ", char) 10 | } 11 | 12 | runes := []rune(str) 13 | fmt.Printf("\nChuỗi dưới dạng runes: %v\n", runes) 14 | } 15 | -------------------------------------------------------------------------------- /14.Variadic Functions/main.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import "fmt" 4 | 5 | func sum(nums ...int) int { 6 | total := 0 7 | for _, num := range nums { 8 | total += num 9 | } 10 | return total 11 | } 12 | 13 | func main() { 14 | fmt.Println("Tổng của các số là:", sum(1, 2, 3, 4, 5)) 15 | } 16 | -------------------------------------------------------------------------------- /17.Pointers/main.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import "fmt" 4 | 5 | func main() { 6 | num := 10 7 | 8 | ptr := &num 9 | 10 | fmt.Println("Giá trị của biến:", num) 11 | fmt.Println("Giá trị được trỏ đến:", *ptr) 12 | 13 | *ptr = 20 14 | fmt.Println("Giá trị của biến sau khi thay đổi:", num) 15 | } 16 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug report 3 | about: Create a report to help us improve 4 | title: '' 5 | labels: bug 6 | assignees: fdhhdjd 7 | --- 8 | 9 | Description: 10 | 11 | Environment: 12 | 13 | Steps to reproduce: 14 | 15 | Actual result: 16 | 17 | Expected result: 18 | 19 | Attachment: 20 | -------------------------------------------------------------------------------- /20.Methods/main.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import "fmt" 4 | 5 | type Circle struct { 6 | Radius float64 7 | } 8 | 9 | func (c Circle) Area() float64 { 10 | return 3.14 * c.Radius * c.Radius 11 | } 12 | 13 | func main() { 14 | c := Circle{ 15 | Radius: 5.0, 16 | } 17 | fmt.Println("Diện tích của hình tròn:", c.Area()) 18 | 19 | } 20 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "editor.formatOnSave": true, 3 | "editor.defaultFormatter": "esbenp.prettier-vscode", 4 | "emmet.triggerExpansionOnTab": true, 5 | "editor.autoClosingBrackets": "always", 6 | "editor.autoClosingQuotes": "always", 7 | "[go]": { 8 | "editor.defaultFormatter": "golang.go" 9 | }, 10 | "cSpell.words": ["fdhhhdjd"] 11 | } -------------------------------------------------------------------------------- /04. Constants/main.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import ( 4 | "fmt" 5 | ) 6 | 7 | const s string = "Tai Dep Trai" 8 | 9 | func main() { 10 | fmt.Println(s) 11 | 12 | const n = 500000000 13 | 14 | const d = 3e20 / n 15 | fmt.Println(d) 16 | 17 | fmt.Println(int64(d)) 18 | } 19 | 20 | // Todo 1: Tai Dep Trai 21 | 22 | // Todo 2: 6e+11 23 | 24 | // Todo 3: 600000000000 25 | -------------------------------------------------------------------------------- /25.Goroutines/main.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import ( 4 | "fmt" 5 | "time" 6 | ) 7 | 8 | func f(from string) { 9 | for i := 0; i < 3; i++ { 10 | fmt.Println(from, ":", i) 11 | } 12 | } 13 | 14 | func main() { 15 | f("hello") 16 | 17 | go f("goroutine") 18 | 19 | go func(msg string) { 20 | fmt.Println(msg) 21 | }("going") 22 | 23 | time.Sleep(time.Second) 24 | fmt.Println("done") 25 | } 26 | -------------------------------------------------------------------------------- /19.Structs/main.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import "fmt" 4 | 5 | type Employee struct { 6 | Name string 7 | Age int 8 | Salary float64 9 | } 10 | 11 | func main() { 12 | emp := Employee{ 13 | Name: "John", 14 | Age: 30, 15 | Salary: 50000.0, 16 | } 17 | 18 | fmt.Println("Thông tin nhân viên:") 19 | fmt.Println("Tên:", emp.Name) 20 | fmt.Println("Tuổi:", emp.Age) 21 | fmt.Println("Lương:", emp.Salary) 22 | } 23 | -------------------------------------------------------------------------------- /23.Struct Embedding/main.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import "fmt" 4 | 5 | type Animal struct { 6 | Name string 7 | } 8 | 9 | func (a Animal) Eat() { 10 | fmt.Printf("%s is eating.\n", a.Name) 11 | } 12 | 13 | type Dog struct { 14 | Animal 15 | Breed string 16 | IsPet bool 17 | } 18 | 19 | func main() { 20 | d := Dog{ 21 | Animal: Animal{Name: "Buddy"}, 22 | Breed: "Golden Retriever", 23 | IsPet: true, 24 | } 25 | 26 | d.Eat() 27 | } 28 | -------------------------------------------------------------------------------- /22.Enums/main.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import ( 4 | "fmt" 5 | ) 6 | 7 | type Status int 8 | 9 | const ( 10 | Pending Status = iota 11 | Processing 12 | Completed 13 | ) 14 | 15 | func main() { 16 | status := Processing 17 | 18 | switch status { 19 | case Pending: 20 | fmt.Println("Công việc đang chờ xử lý.") 21 | case Processing: 22 | fmt.Println("Công việc đang được xử lý.") 23 | case Completed: 24 | fmt.Println("Công việc đã hoàn thành.") 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /02. Values/main.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import "fmt" 4 | 5 | func main() { 6 | fmt.Println("Nguyen"+"Tien"+"Tai", "go"+"lang") 7 | 8 | fmt.Println("1 + 1", "and", 1+1) 9 | 10 | fmt.Println("7.0/3.0", "and", 7.0/3.0) 11 | 12 | fmt.Println(true && false) 13 | 14 | fmt.Println(true || false) 15 | } 16 | 17 | //Todo 1. NguyenTienTai golang 18 | 19 | //Todo 2. 1 + 1 and 2 20 | 21 | //Todo 3. 7.0/3.0 and 2.3333333333333335 22 | 23 | //Todo 4. false 24 | 25 | //Todo 5. true 26 | -------------------------------------------------------------------------------- /03. Variables/main.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import "fmt" 4 | 5 | func main() { 6 | var a string = "initial" 7 | fmt.Println(a) 8 | 9 | var b, c, d int = 31, 05, 2000 10 | fmt.Println(b, c, d) 11 | 12 | var e bool = true 13 | fmt.Println(e) 14 | 15 | var f int 16 | fmt.Println(f) 17 | 18 | k := "apple" 19 | fmt.Println(k) 20 | } 21 | 22 | //Todo 1: initial 23 | 24 | //Todo 2: 31 5 2000 25 | 26 | //Todo 3: true 27 | 28 | //Todo 4: bool = false, string = "", int = 0 29 | 30 | //Todo 5: apple 31 | -------------------------------------------------------------------------------- /13.Multiple Return Values/main.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import "fmt" 4 | 5 | func findMinMax(numbers []int) (min int, max int) { 6 | min, max = numbers[0], numbers[0] 7 | for _, num := range numbers { 8 | if num < min { 9 | min = num 10 | } 11 | if num > max { 12 | max = num 13 | } 14 | } 15 | return min, max 16 | } 17 | 18 | func main() { 19 | numbers := []int{3, 1, 7, 5, 2} 20 | 21 | min, max := findMinMax(numbers) 22 | fmt.Printf("Số nhỏ nhất: %d, Số lớn nhất: %d\n", min, max) 23 | } 24 | -------------------------------------------------------------------------------- /05. for/main.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import "fmt" 4 | 5 | func main() { 6 | i := 1 7 | for i <= 3 { 8 | fmt.Println(i) 9 | i = i + 1 10 | } 11 | 12 | for j := 7; j <= 9; j++ { 13 | fmt.Println(j) 14 | } 15 | 16 | for { 17 | fmt.Println("loop") 18 | break 19 | } 20 | 21 | for n := 0; n <= 5; n++ { 22 | if n%2 == 0 { 23 | continue 24 | } 25 | 26 | fmt.Println(n) 27 | } 28 | 29 | } 30 | 31 | //Todo 1: 1, 2, 3 32 | 33 | //Todo 2: 7, 8, 9 34 | 35 | //Todo 3: loop 36 | 37 | //Todo 4: 1,3,5 38 | -------------------------------------------------------------------------------- /24.Errors/main.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import ( 4 | "errors" 5 | "fmt" 6 | ) 7 | 8 | func divide(a, b int) (int, error) { 9 | if b == 0 { 10 | return 0, errors.New("Không thể chia cho 0") 11 | } 12 | return a / b, nil 13 | } 14 | 15 | func main() { 16 | result, err := divide(10, 0) 17 | if err != nil { 18 | fmt.Println("Lỗi:", err) 19 | } else { 20 | fmt.Println("Kết quả chia:", result) 21 | } 22 | 23 | result, err = divide(10, 2) 24 | if err != nil { 25 | fmt.Println("Lỗi:", err) 26 | } else { 27 | fmt.Println("Kết quả chia:", result) 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /10.Map/main.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import ( 4 | "encoding/json" 5 | "fmt" 6 | ) 7 | 8 | func main() { 9 | people := map[string]map[string]interface{}{ 10 | "John": { 11 | "age": 30, 12 | "gender": "male", 13 | }, 14 | "Jane": { 15 | "age": 25, 16 | "gender": "female", 17 | }, 18 | "Alice": { 19 | "age": 28, 20 | "gender": "female", 21 | }, 22 | } 23 | 24 | jsonData, err := json.Marshal(people) 25 | if err != nil { 26 | fmt.Println("Lỗi khi chuyển đổi thành JSON:", err) 27 | return 28 | } 29 | 30 | fmt.Println(string(jsonData)) 31 | } 32 | -------------------------------------------------------------------------------- /06. If-Else /main.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import "fmt" 4 | 5 | func main() { 6 | // const a int = 23 7 | 8 | // if a == 23 { 9 | // fmt.Println("This is Tai Dev") 10 | // } else { 11 | // fmt.Println("Not must Tai Dev") 12 | // } 13 | 14 | // if 8%4 == 0 { 15 | // fmt.Println("8 is divisible by 4") 16 | // } 17 | 18 | if num := 9; num < 0 { 19 | fmt.Println(num, "is Hao") 20 | } else if num < 10 { 21 | fmt.Println(num, "is Tai") 22 | } else { 23 | fmt.Println(num, "is Linh") 24 | } 25 | } 26 | 27 | //Todo 1: This is Tai Dev 28 | 29 | //Todo 2: 8 is divisible by 4 30 | 31 | //Todo 3: is Tai 32 | -------------------------------------------------------------------------------- /21.Interfaces/main.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import "fmt" 4 | 5 | type Rectangle struct { 6 | Width float64 7 | Height float64 8 | } 9 | 10 | type Circle struct { 11 | Radius float64 12 | } 13 | 14 | type Shape interface { 15 | Area() float64 16 | } 17 | 18 | func (c Circle) Area() float64 { 19 | return 3.14 * c.Radius * c.Radius 20 | } 21 | 22 | func (r Rectangle) Area() float64 { 23 | return r.Width * r.Height 24 | } 25 | 26 | func main() { 27 | shapes := []Shape{ 28 | Circle{Radius: 5.0}, 29 | Rectangle{Width: 3.0, Height: 4.0}, 30 | } 31 | 32 | for _, shape := range shapes { 33 | fmt.Printf("Diện tích của hình là: %.2f\n", shape.Area()) 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature request 3 | about: Suggest an idea for this project 4 | title: '' 5 | labels: feature 6 | assignees: fdhhhdjd 7 | --- 8 | 9 | **Is your feature request related to a problem? Please describe.** 10 | A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] 11 | 12 | **Describe the solution you'd like** 13 | A clear and concise description of what you want to happen. 14 | 15 | **Describe alternatives you've considered** 16 | A clear and concise description of any alternative solutions or features you've considered. 17 | 18 | **Additional context** 19 | Add any other context or screenshots about the feature request here. 20 | -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | # These are supported funding model platforms 2 | github: 3 | - fdhhhdjd 4 | # Up to 4 GitHub Sponsors-enabled usernames, e.g., [user1, user2] 5 | patreon: 6 | user?u=65668237 7 | # A single Patreon username with user ID, e.g., user?u=65668237 8 | open_collective: 9 | # A single Open Collective username 10 | ko_fi: 11 | tientainguyen 12 | # A single Ko-fi username 13 | tidelift: 14 | # A single Tidelift platform-name/package-name, e.g., npm/babel 15 | community_bridge: 16 | # A single Community Bridge project-name, e.g., cloud-foundry 17 | liberapay: nguyentientai 18 | 19 | issuehunt: 20 | # A single IssueHunt username 21 | otechie: 22 | # A single Otechie username 23 | custom: https://profile-forme.com 24 | -------------------------------------------------------------------------------- /26.Channels/main.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import ( 4 | "fmt" 5 | "time" 6 | ) 7 | 8 | func fetchData(ch chan<- string) { 9 | time.Sleep(2 * time.Second) 10 | ch <- "Data fetched successfully" 11 | } 12 | 13 | func main() { 14 | // TH1 15 | messages := make(chan string) 16 | 17 | go func() { messages <- "ping" }() 18 | 19 | msg := <-messages 20 | fmt.Println(msg) 21 | 22 | // TH2 23 | ch := make(chan string) 24 | go fetchData(ch) 25 | result := <-ch 26 | fmt.Println(result) 27 | 28 | // TH2 29 | resultChan := demo() 30 | 31 | resultTH2 := <-resultChan 32 | demo1(resultTH2) 33 | } 34 | 35 | func demo() chan int { 36 | ch := make(chan int) 37 | go func() { 38 | time.Sleep(2 * time.Second) 39 | ch <- 1 40 | }() 41 | return ch 42 | } 43 | 44 | func demo1(number int) { 45 | fmt.Println(number) 46 | } 47 | -------------------------------------------------------------------------------- /09.Slices/main.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import ( 4 | "encoding/json" 5 | "fmt" 6 | "log" 7 | "slices" 8 | ) 9 | 10 | type Person struct { 11 | Fullname string `json:"fullname"` 12 | Age int `json:"age"` 13 | } 14 | 15 | func main() { 16 | people := []Person{ 17 | { 18 | Fullname: "Nguyen Van A", 19 | Age: 30, 20 | }, 21 | { 22 | Fullname: "Tran Thi B", 23 | Age: 28, 24 | }, 25 | { 26 | Fullname: "Le Van C", 27 | Age: 35, 28 | }, 29 | } 30 | 31 | // Add a new person to the slices 32 | newPerson := Person{ 33 | Fullname: "Le Van D", 34 | Age: 29, 35 | } 36 | 37 | people = slices.Insert(people, len(people), newPerson) 38 | 39 | people = slices.Delete(people, 1, 2) 40 | 41 | jsonData, err := json.Marshal(people) 42 | if err != nil { 43 | log.Fatal(err) 44 | } 45 | 46 | fmt.Println(string(jsonData)) 47 | 48 | } 49 | -------------------------------------------------------------------------------- /note.txt: -------------------------------------------------------------------------------- 1 | How To Fix ? 2 | 3 | - fix package main info err 4 | 5 | " opls was not able to find modules in your workspace. 6 | When outside of GOPATH, gopls needs to know which modules you are working on. 7 | You can fix this by opening your workspace to a folder inside a Go module, or 8 | by using a go.work file to specify multiple modules. 9 | See the documentation for more information on setting up your workspace: 10 | https://github.com/golang/tools/blob/master/gopls/doc/workspace.md.go " 11 | 12 | ---- Solution fix it ! ---- 13 | 14 | 1. into folder root run: go mod init Learn_Go 15 | 16 | 2. all friend working guild 17 | 18 | step 1 : Open Vscode, and then go to settings. 19 | 20 | step 2 : In the search bar , type gopls 21 | 22 | step 3 : Just below that you will find settings.json, click on that 23 | 24 | step 4 : Paste the below code their "gopls": { "experimentalWorkspaceModule": true, } 25 | 26 | step 5 : Save it and restart the Vscode, You are good to go now. -------------------------------------------------------------------------------- /07. Switch /main.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import ( 4 | "fmt" 5 | "time" 6 | ) 7 | 8 | func main() { 9 | i := 2 10 | fmt.Print("Write ", i, " as ") 11 | 12 | switch i { 13 | case 1: 14 | fmt.Println("one") 15 | case 2: 16 | fmt.Println("two") 17 | case 3: 18 | fmt.Println("three") 19 | } 20 | 21 | switch time.Now().Weekday() { 22 | case time.Saturday, time.Sunday: 23 | fmt.Println("It's the weekend") 24 | default: 25 | fmt.Println("It's a weekday") 26 | } 27 | 28 | t := time.Now() 29 | switch { 30 | case t.Hour() < 12: 31 | fmt.Println("It's before noon") 32 | default: 33 | fmt.Println("It's after noon") 34 | } 35 | 36 | whatAmI := func(i interface{}) { 37 | switch t := i.(type) { 38 | case bool: 39 | fmt.Println("I'm a bool") 40 | case int: 41 | fmt.Println("I'm an int") 42 | default: 43 | fmt.Printf("Don't know type %T\n", t) 44 | } 45 | } 46 | whatAmI(true) 47 | whatAmI(31) 48 | whatAmI("Tai") 49 | } 50 | 51 | //Todo 1: Write 2 as 52 | 53 | //Todo 2: Tow 54 | 55 | //Todo 3: It's a weekday 56 | 57 | //Todo 4: It's after noon 58 | 59 | //Todo 5: I'm a bool , I'm an int, Don't know type string 60 | -------------------------------------------------------------------------------- /08. Arrays/main.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import ( 4 | "encoding/json" 5 | "fmt" 6 | "log" 7 | ) 8 | 9 | // type Person struct { 10 | // Fullname string 11 | // Age int 12 | // } 13 | type Person struct { 14 | Fullname string `json:"fullname"` 15 | Age int `json:"age"` 16 | } 17 | 18 | func main() { 19 | // var a [5]int 20 | // fmt.Println("emp:", a) 21 | 22 | // a[4] = 100 23 | // fmt.Println("set:", a) 24 | // fmt.Println("get:", a[4]) 25 | 26 | // fmt.Println("len:", len(a)) 27 | 28 | // b := [5]int{1, 2, 3, 4, 5} 29 | // fmt.Println("dcl:", b) 30 | 31 | // //? 2X3 (2 row and 3 column) 32 | // var twoD [2][3]int 33 | // for i := 0; i < 2; i++ { 34 | // for j := 0; j < 3; j++ { 35 | // twoD[i][j] = i + j 36 | // } 37 | // } 38 | // fmt.Println("2d: ", twoD) 39 | 40 | people := []Person{ 41 | { 42 | Fullname: "Tai", 43 | Age: 24, 44 | }, 45 | { 46 | Fullname: "Hao", 47 | Age: 24, 48 | }, 49 | } 50 | jsonData, err := json.Marshal(people) 51 | 52 | if err != nil { 53 | log.Fatal(err) 54 | } 55 | 56 | fmt.Println(string(jsonData)) 57 | } 58 | 59 | //Todo 1: emp: [0 0 0 0 0] 60 | 61 | //Todo 2: set: [0 0 0 0 100] 62 | 63 | //Todo 3: get: 100 64 | 65 | //Todo 4: len: 5 66 | 67 | //Todo 5: dcl: [1 2 3 4 5] 68 | 69 | //Todo 6: 2d: [[0 1 2] [1 2 3]] 70 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |

2 | 3 |

4 | Linkedin 5 | Profile 6 | Phone 7 | License 8 |

9 | 10 | ## Project: Class Go Lang with Teacher Tai 🧑‍🏫 11 | 12 | ## Document standard: https://gobyexample.com 13 | 14 | ## Team Word: Liên hệ công việc https://profile-forme.com 15 | 16 | ## 1. Nguyen Tien Tai( MainTain 🚩). 17 | 18 | ## Tài Khoản Donate li Cf để có động lực code cho anh em tham khảo 😄. 19 | 20 | ![giphy](https://3.bp.blogspot.com/-SzGvXn2sTmw/V6k-90GH3ZI/AAAAAAAAIsk/Q678Pil-0kITLPa3fD--JkNdnJVKi_BygCLcB/s1600/cf10-fbc08%2B%25281%2529.gif) 21 | 22 | ## Mk: NGUYEN TIEN TAI 23 | 24 | ## STK: 1651002972052 25 | 26 | ## Chi Nhánh: NGAN HANG TMCP AN BINH (ABBANK). 27 | 28 | ## SUPPORT CONTACT: [https://profile-forme.com](https://profile-forme.com) 29 | 30 | ## Thank You <3. 31 | -------------------------------------------------------------------------------- /.github/COMMIT_CONVENTION.md: -------------------------------------------------------------------------------- 1 | # Git Commit Message Convention 2 | We have very precise rules over how our git commit messages can be formatted. This leads to more readable messages that are easy to follow when looking through the project history. 3 | 4 | ## Commit Message Format 5 | Each commit message consists of a **header**, a **body** and a **footer**. The header has a special 6 | format that includes a **type**, a **scope** and a **subject**: 7 | 8 | ``` 9 | (): 10 | 11 | 12 | 13 |