Go.Tips
12 subscribers
7 photos
15 links
Useful tips, libraries and information for Go (Golang) developers

Rust::Tips: @rust_code_tips
My GitHub: https://github.com/ankddev
Download Telegram
About this channel
In this channel I will publish useful libraries, tips, quizzes and other information for Go developers.

My GitHub: https://github.com/ankddev

Channel link: https://t.me/golang_tips

My other channels:
- Rust::Tips - @rust_code_tips - about Rust language

Official Go Discord server: https://discord.com/invite/golang

Hashtags:
#tip - useful tip about language or it's tools
#code - code example
#program - project, wrote on Go
#library - useful library
#resource - useful resource about language
#idiomatic - idiomatic code and patterns
#book - book about Go or it's tools/projects
#fact - interesting or fun fact about Go
#goroutins - related to goroutins
#errors - error handling
#advanced - advanced topics
#project and #showcase - projects written in Go
#news - Go-related news
...and some other hashtags about specific topic!
Use embed for Static Assets
Use the embed package to 📦 include static assets like HTML or CSS directly in your 📎 binary.
//go:embed index.html
var content embed.FS

#tip #code
@golang_tips
Use runtime.GOMAXPROCS for CPU Control
🛠 Adjust GOMAXPROCS to control the number of OS threads used by Go programs.
runtime.GOMAXPROCS(4)

#code #tip
@golang_tips
Handle structured errors with errors.As
Use errors.As to extract specific error types from a chain for granular error handling.
type NotFoundError struct{ Msg string }

func (e *NotFoundError) Error() string { return e.Msg }

err := fmt.Errorf("wrapped: %w", &NotFoundError{Msg: "User not found"})
var target *NotFoundError
if errors.As(err, &target) {
fmt.Println("Found:", target.Msg) // Output: Found: User not found
}

#tip #code #errors
@golang_tips
Propagate Context deadlines for cancellable workflows
Use context.WithTimeout to enforce deadlines in distributed systems or long-running operations.
ctx, cancel := context.WithTimeout(context.Background(), 500*time.Millisecond)
defer cancel()

select {
case <-time.After(1 * time.Second):
fmt.Println("Task completed")
case <-ctx.Done():
fmt.Println("Deadline exceeded:", ctx.Err()) // Output: Deadline exceeded
}

#tip #code
@golang_tips
👍1