Go चीट शीट
एक खोजने योग्य, प्रिंट करने योग्य Go संदर्भ: स्ट्रक्ट्स, स्लाइस, मैप्स, इंटरफेस, एरर रैपिंग, गोरूटीन्स, चैनल्स, जेनरिक्स और go CLI। मुफ्त।
Basics
10package main
import ("fmt"; "os")
x := 42
var s string
const MaxRetries = 3
const (A = iota; B; C)
a, b = b, a
_, err := doWork()
fmt.Println("hi"); fmt.Printf("%v\n", x)
fmt.Sprintf("%s-%d", name, id)
Types, structs & methods
10type User struct { Name string; Age int }
u := User{Name: "Sam", Age: 30}
u.Name = "Alex"
func (u User) Label() string
func (u *User) Rename(n string)
func NewUser(n string) *User
type Admin struct { User; Level int }
type UserID int
Name string `json:"name,omitempty"`
p := &User{}; p.Name = "x"
Slices & maps
13s := []int{1, 2, 3}
s = make([]int, 0, 10)
s = append(s, 4, 5)
n := copy(dst, src)
s[1:3]
len(s), cap(s)
var s []int; s = append(s, 1)
m := map[string]int{"a": 1}
v, ok := m["key"]
delete(m, "key")
for k, v := range m { ... }
slices.Contains(s, 3)
slices.Sort(s); maps.Keys(m)
Control flow
10for i := 0; i < n; i++ { ... }
for i, v := range items { ... }
for cond { ... }
for { ... }
for i := range 10 { ... }
if err := load(); err != nil { ... }
switch status { case "on": ... default: ... }
switch { case n > 10: ... }
switch v := x.(type) { case int: ... }
outer: for { break outer }
Functions & defer
9func add(a, b int) int { return a + b }
func load() ([]byte, error)
func div(a, b int) (q int, err error)
func sum(ns ...int) int
defer f.Close()
defer mu.Unlock() // LIFO order
counter := func() int { n++; return n }
type Handler func(w, r)
apply(items, strings.ToUpper)
Interfaces & type assertions
10type Stringer interface { String() string }
// no "implements" keyword
io.Reader / io.Writer
var x any = 42
s, ok := x.(string)
switch v := x.(type) { case string: ... }
type ReadCloser interface { Reader; Closer }
func Save(w io.Writer, u User) error
func NewStore() *Store
var _ Stringer = (*User)(nil)
Error handling
10if err != nil { return err }
errors.New("not found")
fmt.Errorf("load %s: %w", path, err)
errors.Is(err, os.ErrNotExist)
var pe *fs.PathError; errors.As(err, &pe)
var ErrNotFound = errors.New("not found")
func (e *ValidationError) Error() string
errors.Join(err1, err2)
defer func() { recover() }()
panic("unreachable")
Goroutines & channels
12go work()
ch := make(chan int)
ch := make(chan int, 10)
ch <- v / v := <-ch
close(ch); for v := range ch { ... }
select { case v := <-a: ... case b <- x: ... }
var wg sync.WaitGroup; wg.Add(1); wg.Wait()
defer wg.Done()
for job := range jobs { results <- run(job) }
ctx, cancel := context.WithTimeout(ctx, 5*time.Second)
select { case <-ctx.Done(): return ctx.Err() }
var mu sync.Mutex; mu.Lock(); defer mu.Unlock()
Generics
9func Map[T, U any](s []T, f func(T) U) []U
func Keys[K comparable, V any](m map[K]V) []K
type Number interface { ~int | ~float64 }
func Sum[T Number](ns []T) T
type Stack[T any] struct { items []T }
s := Stack[int]{}
doubled := Map(nums, double)
func Min[T cmp.Ordered](a, b T) T
min(a, b), max(a, b)
Standard library gems
14strings.Split(s, ","); strings.Join(parts, "-")
strings.Contains, HasPrefix, TrimSpace
n, err := strconv.Atoi("42")
time.Now(); time.Since(start)
t.Format("2006-01-02 15:04")
time.Sleep(200 * time.Millisecond)
data, err := os.ReadFile("cfg.json")
os.WriteFile(path, data, 0o644)
os.Getenv("HOME"); filepath.Join(dir, f)
json.Marshal(v); json.Unmarshal(b, &v)
resp, err := http.Get(url); defer resp.Body.Close()
http.HandleFunc("/", h); http.ListenAndServe(":8080", nil)
slog.Info("started", "port", 8080)
sc := bufio.NewScanner(f); for sc.Scan()
Testing & benchmarks
11func TestAdd(t *testing.T) { ... }
t.Errorf("got %d, want %d", got, want)
t.Fatalf("setup failed: %v", err)
tests := []struct{ in, want int }{...}
t.Run(tc.name, func(t *testing.T) {...})
t.Helper()
t.Parallel()
func BenchmarkAdd(b *testing.B) { for range b.N { add(1, 2) } }
go test -bench=. -benchmem
go test -run TestAdd ./...
go test -cover ./...
Go CLI
11go mod init example.com/app
go mod tidy
go get github.com/pkg/x@latest
go run .
go build ./...
go test ./...
go vet ./...
gofmt -w .
go install golang.org/x/tools/...@latest
GOOS=linux GOARCH=amd64 go build
go doc strings.Split
कोई प्रविष्टि “:q” से मेल नहीं खाती।
Go चीट शीट के बारे में
यह Go चीट शीट इडियोमैटिक Go को एक खोजने योग्य पेज में संघनित करती है: बेसिक्स, टाइप, स्ट्रक्ट और मेथड, स्लाइस और मैप, कंट्रोल फ्लो, फंक्शन और defer, इंटरफेस और टाइप असर्शन, एरर हैंडलिंग, गोरूटीन और चैनल, जेनेरिक्स, स्टैंडर्ड लाइब्रेरी की खूबियां, टेस्टिंग और बेंचमार्क, और go कमांड लाइन।
यह उन चीज़ों पर ध्यान केंद्रित करती है जिन्हें Go डेवलपर याद करने के बजाय देखते हैं: किसी एलिमेंट को हटाने की सटीक स्लाइस ट्रिक, errors.Is और errors.As में क्या अंतर है, टाइमआउट वाला select स्टेटमेंट, एक टेबल-ड्रिवन टेस्ट, या कौन सा go कमांड क्या चलाता है, हर पंक्ति पर एक छोटे स्पष्टीकरण के साथ।
यह शीट मुफ्त और क्लाइंट-साइड है: सर्च बॉक्स से पंक्तियों को लाइव फिल्टर करें, स्टिकी टेबल ऑफ कंटेंट्स से सेक्शन के बीच कूदें, एक क्लिक से कोई भी स्निपेट कॉपी करें और कोड करते समय संदर्भ के लिए पेज प्रिंट करें।
Go चीट शीट का उपयोग कैसे करें
- सेक्शन को देखें, Basics और Slices & maps से लेकर Goroutines & channels होते हुए Go CLI तक।
- हर पंक्ति को लाइव फिल्टर करने के लिए channel, defer या errors.Is जैसे कीवर्ड खोजें।
- जब आपको कमांड के बजाय टाइप सिंटैक्स चाहिए तो Interfaces या Generics पर जाएं।
- Go कोड को अपने क्लिपबोर्ड में कॉपी करने के लिए किसी स्निपेट या उसके कॉपी आइकन पर क्लिक करें।
- ऑफलाइन Go संदर्भ के लिए शीट प्रिंट करें।