Skip to content

Commit 4ea63d2

Browse files
authored
save
1 parent 858c71b commit 4ea63d2

File tree

214 files changed

+8873
-5729
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

214 files changed

+8873
-5729
lines changed

content/my/docs/README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
# Go by Example

src/SUMMARY.md renamed to content/my/docs/SUMMARY.md

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,6 @@
11
# Summary
2-
32
[Go by Example](README.md)
4-
53
---
6-
74
- [Hello World](hello-world.md)
85
- [Values](values.md)
96
- [Variables](variables.md)
@@ -14,23 +11,20 @@
1411
- [Arrays](arrays.md)
1512
- [Slices](slices.md)
1613
- [Maps](maps.md)
14+
- [Range](range.md)
1715
- [Functions](functions.md)
1816
- [Multiple Return Values](multiple-return-values.md)
1917
- [Variadic Functions](variadic-functions.md)
2018
- [Closures](closures.md)
2119
- [Recursion](recursion.md)
22-
- [Range over Built-in Types](range-over-built-in-types.md)
2320
- [Pointers](pointers.md)
2421
- [Strings and Runes](strings-and-runes.md)
2522
- [Structs](structs.md)
2623
- [Methods](methods.md)
2724
- [Interfaces](interfaces.md)
28-
- [Enums](enums.md)
2925
- [Struct Embedding](struct-embedding.md)
3026
- [Generics](generics.md)
31-
- [Range over Iterators](range-over-iterators.md)
3227
- [Errors](errors.md)
33-
- [Custom Errors](custom-errors.md)
3428
- [Goroutines](goroutines.md)
3529
- [Channels](channels.md)
3630
- [Channel Buffering](channel-buffering.md)
@@ -80,7 +74,6 @@
8074
- [Command-Line Flags](command-line-flags.md)
8175
- [Command-Line Subcommands](command-line-subcommands.md)
8276
- [Environment Variables](environment-variables.md)
83-
- [Logging](logging.md)
8477
- [HTTP Client](http-client.md)
8578
- [HTTP Server](http-server.md)
8679
- [Context](context.md)

content/my/docs/closures.md

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
# Closures
2+
```go
3+
// Go က [_anonymous functions_](https://en.wikipedia.org/wiki/Anonymous_function) တွေကို support လုပ်ပါတယ်၊
4+
// ဒီ Anonymous (အမည်မပါသော) function တွေသုံးပီးတော့ <a href="https://en.wikipedia.org/wiki/Closure_(computer_science)"><em>closures</em></a> တွေကို
5+
// တည်ဆောက်တယ်။ Anonymous function တွေက function တွေကိုအမည်မပါဘဲသုံးချင်တဲ့အချိန်မှာအတော်လေးအသုံးဝင်တယ်။
6+
7+
package main
8+
9+
import "fmt"
10+
11+
// ဒီ `intSeq` ဆိုတဲ့ function ကနောက်ထက် function တခုကို return ပြန်ထားတယ်၊
12+
// အဲ့ function က `intSeq` ရဲ့ body ထဲမှာအမည်မပါတဲ့ function တခုသတ်မှတ်ထားတယ်။
13+
// အဲ့မှာအမည်မပါဘဲသတ်မှတ်ထားတဲ့ function က `i` variable ကို _close over_ လုပ်ပီးတော့
14+
// closure တခုတည်ဆောက်လိုက်တယ်။
15+
// ဒါကဘာကိုဆိုလိုတာလဲဆိုရင် `intSeq` ကိုခေါ်ပီးတော့ Anonymous function ကို
16+
// return ပြန်ပီးတာတောင် return ပြန်လိုက်တဲ့ Anonymous function က `intSeq` ရဲ့ `i` variable ကို access
17+
// ရနေသေးတယ်ဆိုတာကိုပြောချင်တာပါ။
18+
19+
func intSeq() func() int {
20+
i := 0
21+
return func() int {
22+
i++
23+
return i
24+
}
25+
}
26+
27+
func main() {
28+
29+
// ကျနော်တို့ `intSeq` ကိုခေါ်ပီးတော့ return ပြန်လိုက်တဲ့ Anonymous function ကို
30+
// `nextInt` ဆိုတဲ့ variable ထဲမှာထည့်သွင်းထားတယ်၊ ဒီ function ကသူ့ထဲက value ဖြစ်တဲ့
31+
// i ကို capture လုပ်ပီးတော့ `nextInt` ကိုခေါ်တိုင်း အဲ့ဒီ့ i တန်ဖိုးကို update လုပ်ပေးတယ်။
32+
nextInt := intSeq()
33+
34+
// closure ရဲ့ကျိုးသတ်ရောက်မှူကိုမြင်ဖို့ `nextInt` ကိုအနည်းငယ်ခေါ်ကြည့်လိုက်ကြရအောင်
35+
fmt.Println(nextInt())
36+
fmt.Println(nextInt())
37+
fmt.Println(nextInt())
38+
39+
// ဒီ function တခုထဲကိုဘဲဒီ state သတ်ရောက်နေတယ်ဆိုသေချာဖို့ရာအတွက်
40+
// အသစ်တခုတည်ဆောက်ပီး စမ်းကြည့်လိုက်ကြရအောင်။
41+
newInts := intSeq()
42+
fmt.Println(newInts())
43+
}
44+
```
45+
```sh
46+
$ go run closures.go
47+
1
48+
2
49+
3
50+
1
51+
52+
# The last feature of functions we'll look at for now is
53+
# recursion.
54+
```
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
# Command-Line Arguments
2+
```go
3+
// [_Command-line arguments_](https://en.wikipedia.org/wiki/Command-line_interface#Arguments)
4+
// သည် ပရိုဂရမ်များ၏ လုပ်ဆောင်မှုကို parameter ပေးရန် အသုံးများသော နည်းလမ်းတစ်ခုဖြစ်သည်။
5+
// ဥပမာ - `go run hello.go` သည် `go` ပရိုဂရမ်အတွက် `run` နှင့် `hello.go` arguments များကို အသုံးပြုသည်။
6+
7+
package main
8+
9+
import (
10+
"fmt"
11+
"os"
12+
)
13+
14+
func main() {
15+
16+
// `os.Args` သည် ကနဦး command-line arguments များကို ရယူခွင့်ပေးသည်။
17+
// ဤ slice ထဲရှိ ပထမဆုံးတန်ဖိုးသည် ပရိုဂရမ်၏ လမ်းကြောင်းဖြစ်ပြီး
18+
// `os.Args[1:]` သည် ပရိုဂရမ်သို့ ပေးသော arguments များကို ကိုင်တွယ်(hold) သည်ကို သတိပြုပါ။
19+
argsWithProg := os.Args
20+
argsWithoutProg := os.Args[1:]
21+
22+
// သင်သည် ပုံမှန် indexing ဖြင့် တစ်ခုချင်းစီသော args များကို ရယူနိုင်သည်။
23+
arg := os.Args[3]
24+
25+
fmt.Println(argsWithProg)
26+
fmt.Println(argsWithoutProg)
27+
fmt.Println(arg)
28+
}
29+
```
30+
```sh
31+
# Command-line arguments တွေကို စမ်းသပ်ဖို့အတွက်
32+
# ပထမဆုံး `go build` နဲ့ binary ကို
33+
# တည်ဆောက်တာ(build)က အကောင်းဆုံးဖြစ်ပါတယ်။
34+
$ go build command-line-arguments.go
35+
$ ./command-line-arguments a b c d
36+
[./command-line-arguments a b c d]
37+
[a b c d]
38+
c
39+
40+
# နောက်တစ်ဆင့်အနေနဲ့ ပိုပြီးအဆင့်မြင့်တဲ့
41+
# command-line processing ကို
42+
# flags တွေသုံးပြီး လေ့လာကြမှာ ဖြစ်ပါတယ်။
43+
```

content/my/docs/command-line-flags.md

Lines changed: 107 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,107 @@
1+
# Command-Line Flags
2+
```go
3+
// [_Command-line flags_](https://en.wikipedia.org/wiki/Command-line_interface#Command-line_option)
4+
// ကိုကွန်မန်းလိုင်းပရိုဂရမ်များအတွက် option များသတ်မှတ်ရန် အသုံးများသောနည်းလမ်းတစ်ခုဖြစ်သည်။
5+
// ဥပမာ `wc -l` တွင် `-l` သည် command-line flag တစ်ခုဖြစ်သည်။
6+
7+
package main
8+
9+
// Go သည် အခြေခံ command-line flag parsing ကို ထောက်ပံ့ပေးသော `flag` package ကို ပေးထားသည်။
10+
// ကျွန်ုပ်တို့သည် ဤ package ကို အသုံးပြု၍ ကျွန်ုပ်တို့၏ နမူနာ command-line program ကို အကောင်အထည်ဖော်မည်။
11+
import (
12+
"flag"
13+
"fmt"
14+
)
15+
16+
func main() {
17+
18+
// အခြေခံ flag ကြေညာချက်များကို string, integer နှင့် boolean option များအတွက် ရရှိနိုင်သည်။
19+
// ဤနေရာတွင် ကျွန်ုပ်တို့သည် `"foo"` မူလတန်ဖိုးနှင့် တိုတောင်းသော ဖော်ပြချက်ပါသော `word` string flag ကို ကြေညာသည်။
20+
// ဤ `flag.String` function သည် string pointer တစ်ခု (string တန်ဖိုးမဟုတ်) ကို ပြန်ပေးသည်။
21+
// ကျွန်ုပ်တို့သည် ဤ pointer ကို မည်သို့အသုံးပြုမည်ကို အောက်မှာတွေ့ရပါ့မယ်။
22+
wordPtr := flag.String("word", "foo", "a string")
23+
24+
// ဤသည်မှာ `word` flag နှင့် ဆင်တူသောနည်းလမ်းကို အသုံးပြု၍ `numb` နှင့် `fork` flag များကို ကြေညာခြင်းဖြစ်သည်။
25+
numbPtr := flag.Int("numb", 42, "an int")
26+
forkPtr := flag.Bool("fork", false, "a bool")
27+
28+
// ပရိုဂရမ်၏ အခြားနေရာတွင် ကြေညာထားပြီးသား var ကို အသုံးပြုသော option ကိုလည်း ကြေညာနိုင်သည်။
29+
// flag ကြေညာခြင်း function သို့ pointer တစ်ခုကို ပေးပို့ရန် လိုအပ်ကြောင်း သတိပြုပါ။
30+
var svar string
31+
flag.StringVar(&svar, "svar", "bar", "a string var")
32+
33+
// flag အားလုံးကြေညာပြီးနောက် command-line parsing ကို အကောင်အထည်ဖော်ရန် `flag.Parse()` ကို ခေါ်ပါ။
34+
flag.Parse()
35+
36+
// ဤနေရာတွင် ကျွန်ုပ်တို့သည် parse လုပ်ထားသော option များနှင့် နောက်ဆက်တွဲ positional argument များကို dump လုပ်မည်။
37+
// အမှန်တကယ် option တန်ဖိုးများကို ရရှိရန် `*wordPtr` စသည်ဖြင့် pointer များကို dereference လုပ်ရန် လိုအပ်ကြောင်း သတိပြုပါ။
38+
fmt.Println("word:", *wordPtr)
39+
fmt.Println("numb:", *numbPtr)
40+
fmt.Println("fork:", *forkPtr)
41+
fmt.Println("svar:", svar)
42+
fmt.Println("tail:", flag.Args())
43+
}
44+
```
45+
```sh
46+
# command-line flags ပရိုဂရမ်ကို
47+
# စမ်းသပ်ရန်အတွက်
48+
# ပထမဦးစွာ compile လုပ်ပြီး ထွက်လာသော
49+
# binary ကို တိုက်ရိုက် run သင့်သည်။
50+
$ go build command-line-flags.go
51+
52+
# flag အားလုံးအတွက် တန်ဖိုးများပေး၍
53+
# build လုပ်ထားသော ပရိုဂရမ်ကို စမ်းသပ်ကြည့်ပါ။
54+
$ ./command-line-flags -word=opt -numb=7 -fork -svar=flag
55+
word: opt
56+
numb: 7
57+
fork: true
58+
svar: flag
59+
tail: []
60+
61+
# flag များကို ချန်လှပ်ထားပါက ၎င်းတို့သည်
62+
# အလိုအလျောက် ၎င်းတို့၏ မူလ(default) တန်ဖိုးများကို
63+
# ယူကြောင်း သတိပြုပါ။
64+
$ ./command-line-flags -word=opt
65+
word: opt
66+
numb: 42
67+
fork: false
68+
svar: bar
69+
tail: []
70+
71+
# နောက်ဆက်တွဲ positional argument
72+
# များကို flag များ၏နောက်တွင် ပေးနိုင်သည်။
73+
$ ./command-line-flags -word=opt a1 a2 a3
74+
word: opt
75+
...
76+
tail: [a1 a2 a3]
77+
78+
# `flag` package သည် flag အားလုံးကို positional
79+
# argument များ၏ရှေ့တွင် ပေါ်လာရန်
80+
# လိုအပ်ကြောင်း သတိပြုပါ
81+
# (သို့မဟုတ်ပါက flag များကို positional argument
82+
# များအဖြစ် အဓိပ္ပာယ်ကောက်ယူမည်)။
83+
$ ./command-line-flags -word=opt a1 a2 a3 -numb=7
84+
word: opt
85+
numb: 42
86+
fork: false
87+
svar: bar
88+
tail: [a1 a2 a3 -numb=7]
89+
90+
# command-line ပရိုဂရမ်အတွက် အလိုအလျောက်ထုတ်ပေးသော
91+
# help စာသားကို ရရှိရန် `-h` သို့မဟုတ် `--help`
92+
# flag များကို အသုံးပြုပါ။
93+
$ ./command-line-flags -h
94+
Usage of ./command-line-flags:
95+
-fork=false: a bool
96+
-numb=42: an int
97+
-svar="bar": a string var
98+
-word="foo": a string
99+
100+
# `flag` package တွင် သတ်မှတ်မထားသော flag
101+
# တစ်ခုကို ပေးပါက ပရိုဂရမ်သည် အမှားပြ message
102+
# ကို ပုံနှိပ်ထုတ်ပေးပြီး help စာသားကို ထပ်ပြပေးမည်။
103+
$ ./command-line-flags -wat
104+
flag provided but not defined: -wat
105+
Usage of ./command-line-flags:
106+
...
107+
```
Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
# Command-Line Subcommands
2+
```go
3+
// `go` ကဲ့သို့သော command-line tools အချို့သည် မိမိတို့ပိုင် flag set များပါဝင်သော subcommand များစွာရှိသည်။
4+
// ဥပမာအားဖြင့် `go build` နှင့် `go get` တို့သည် `go` tool ၏ မတူညီသော subcommand နှစ်ခုဖြစ်သည်။
5+
// `flag` package သည် ရိုးရှင်းသော subcommand များကို လွယ်ကူစွာ သတ်မှတ်နိုင်စေပြီး ၎င်းတို့တွင် မိမိတို့ပိုင် flag များပါဝင်နိုင်သည်။
6+
7+
package main
8+
9+
import (
10+
"flag"
11+
"fmt"
12+
"os"
13+
)
14+
15+
func main() {
16+
17+
// `NewFlagSet` function ကိုအသုံးပြု၍ subcommand တစ်ခုကို ကြေညာပြီး
18+
// ထို subcommand အတွက် သီးသန့် flag အသစ်များကို သတ်မှတ်သည်။
19+
fooCmd := flag.NewFlagSet("foo", flag.ExitOnError)
20+
fooEnable := fooCmd.Bool("enable", false, "enable")
21+
fooName := fooCmd.String("name", "", "name")
22+
23+
// အခြား subcommand တစ်ခုအတွက် မတူညီသော flag များကို သတ်မှတ်နိုင်သည်။
24+
barCmd := flag.NewFlagSet("bar", flag.ExitOnError)
25+
barLevel := barCmd.Int("level", 0, "level")
26+
27+
// Subcommand ကို program ၏ ပထမဆုံး argument အဖြစ် မျှော်လင့်ထားသည်။
28+
if len(os.Args) < 2 {
29+
fmt.Println("expected 'foo' or 'bar' subcommands")
30+
os.Exit(1)
31+
}
32+
33+
// မည်သည့် subcommand ကို ခေါ်ယူထားသည်ကို စစ်ဆေးသည်။
34+
switch os.Args[1] {
35+
// Subcommand တစ်ခုချင်းစီအတွက် ၎င်း၏ flag များကို parse လုပ်ပြီး
36+
// နောက်ဆက်တွဲ positional argument များကို အသုံးပြုနိုင်သည်။
37+
case "foo":
38+
fooCmd.Parse(os.Args[2:])
39+
fmt.Println("subcommand 'foo'")
40+
fmt.Println(" enable:", *fooEnable)
41+
fmt.Println(" name:", *fooName)
42+
fmt.Println(" tail:", fooCmd.Args())
43+
case "bar":
44+
barCmd.Parse(os.Args[2:])
45+
fmt.Println("subcommand 'bar'")
46+
fmt.Println(" level:", *barLevel)
47+
fmt.Println(" tail:", barCmd.Args())
48+
default:
49+
fmt.Println("expected 'foo' or 'bar' subcommands")
50+
os.Exit(1)
51+
}
52+
}
53+
```
54+
```sh
55+
# ပထမဦးစွာ foo subcommand ကို ခေါ်ယူသည်။
56+
$ ./command-line-subcommands foo -enable -name=joe a1 a2
57+
subcommand 'foo'
58+
enable: true
59+
name: joe
60+
tail: [a1 a2]
61+
62+
# ယခု bar ကို စမ်းကြည့်သည်။
63+
$ ./command-line-subcommands bar -level 8 a1
64+
subcommand 'bar'
65+
level: 8
66+
tail: [a1]
67+
68+
# သို့သော် bar သည် foo ၏ flag များကို လက်ခံမည်မဟုတ်ပါ။
69+
$ ./command-line-subcommands bar -enable a1
70+
flag provided but not defined: -enable
71+
Usage of bar:
72+
-level int
73+
level
74+
75+
# နောက်တစ်ဆင့်တွင် ကျွန်ုပ်တို့သည် environment variable
76+
# များကို ကြည့်မည်ဖြစ်သည်။
77+
# ၎င်းသည် program များကို parameter ပေးရန်
78+
# နောက်ထပ်နည်းလမ်းတစ်ခုဖြစ်သည်။
79+
```

content/my/docs/constants.md

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
# Constants
2+
```go
3+
// Go က character, string, boolean, နှင့် numeric values
4+
// အမျိုးမျိုးအတွက် _constants_ ကိုအသုံးပြုနိုင်ပါတယ်။
5+
6+
package main
7+
8+
import (
9+
"fmt"
10+
"math"
11+
)
12+
13+
// `const` ကိုသုံးပီး constant value ကိုဖန်တီးနိုင်ပါတယ်။
14+
const s string = "constant"
15+
16+
func main() {
17+
fmt.Println(s)
18+
19+
// `const` statement က `var` statement ကြေငြာလို့ရတဲ့
20+
// ဘယ်နေရာမှာမဆို ကြောငြာနိုင်ပါတယ်။
21+
const n = 500000000
22+
23+
// Constant အသုံးအနှုန်းက တိကျတဲ့ ဂဏန်းသင်္ချာ တွက်ချက်နိုင်ပါတယ်။
24+
const d = 3e20 / n
25+
fmt.Println(d)
26+
27+
// ဂဏန်း constant က သေချာ type မပြောင်းထားဘူးဆိုလျှင်
28+
// type မရှိပါဘူး။
29+
fmt.Println(int64(d))
30+
31+
// variable assignment သို့ function call မှာ
32+
// ဂဏန်းသင်္ချာတွေကို လိုအပ်လျှင် လိုအပ်သလို
33+
// အမျိုးအစားပြောင်းနိုင်ပါတယ်။
34+
// ဥပမာအနေနဲ့ `math.Sin` က `float64` ကိုလိုအပ်ပါတယ်။
35+
fmt.Println(math.Sin(n))
36+
}
37+
```
38+
```sh
39+
$ go run constant.go
40+
constant
41+
6e+11
42+
600000000000
43+
-0.28470407323754404
44+
```

0 commit comments

Comments
 (0)