Golang notes
ch := make(chan int)
go func() {
ch <- 42
}()
fmt.Println(<-ch)
type Base struct {
ID int
}
type User struct {
Base
Name string
}
u := User{Base: Base{ID: 1}, Name: "John"}
fmt.Println(u.ID, u.Name)
ch := make(chan int)
go func() {
ch <- 42
}()
fmt.Println(<-ch)
Custom String Representations: • Implement the Stringer interface for custom string representations of your types
type Person struct {
Name string
Age int
}
func (p Person) String() string {
return fmt.Sprintf("%s is %d years old", p.Name, p.Age)
}
p := Person{Name: "Alice", Age: 30}
fmt.Println(p)
Use init Function for Initialization: • The init function is called before the main function and is useful for setup tasks.
var config Config
func init() {
config = loadConfig()
}
func main() {
fmt.Println(config)
}
func add(a, b int) int {
return a + b
}
func TestAdd(t *testing.T) {
result := add(2, 3)
if result != 5 {
t.Errorf("expected 5, got %d", result)
}
}
Use context for Cancellation and Timeouts: • Use the context package to handle cancellation and timeouts in concurrent operations.
func doWork(ctx context.Context) {
select {
case <-time.After(2 * time.Second):
fmt.Println("Work done")
case <-ctx.Done():
fmt.Println("Canceled")
}
}
func main() {
ctx, cancel := context.WithTimeout(context.Background(), 1*time.Second)
defer cancel()
go doWork(ctx)
time.Sleep(2 * time.Second)
}
type Weekday int
const (
Sunday Weekday = iota
Monday
Tuesday
Wednesday
Thursday
Friday
Saturday
)
func (d Weekday) String() string {
return [...]string{"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"}[d]
}
fmt.Println(Monday) // Output: Monday