Zero Values в Go: что это такое, зачем нужны и где чаще всего ошибаются
package main
import "fmt"
func main() {
var i int
var f float64
var s string
var b bool
fmt.Println(i) // 0
fmt.Println(f) // 0
fmt.Println(s) // ""
fmt.Println(b) // false
}
package main
import (
"bytes"
"fmt"
"sync"
)
func main() {
var mu sync.Mutex
mu.Lock()
mu.Unlock()
var buf bytes.Buffer
buf.WriteString("hello")
fmt.Println(buf.String()) // hello
} package main
import "fmt"
type User struct {
Name string
Age int
Active bool
}
func main() {
var u User
fmt.Printf("%+v\n", u)
} {Name: Age:0 Active:false} type Cache struct {
items map[string]string
} var c Cache
c.items["key"] = "value" package main
type Item struct {
Value string
}
type Cache struct {
items map[string]Item
}
func NewCache() *Cache {
return &Cache{
items: make(map[string]Item),
}
} package main
type Counter struct {
count int
}
func (c *Counter) Inc() {
c.count++
} package main
import "fmt"
func main() {
var s []int
fmt.Println(len(s)) // 0
fmt.Println(cap(s)) // 0
s = append(s, 1)
fmt.Println(s) // [1]
} package main
import "fmt"
func main() {
var m map[string]int
fmt.Println(m["key"]) // 0
m["key"] = 1 // panic: assignment to entry in nil map
} m := make(map[string]int)
m["key"] = 1 var ch chan int ch <- 1 // блокировка
<-ch // блокировка ch = make(chan int) var err error
fmt.Println(err == nil) // true var p *MyError = nil
var err error = p
fmt.Println(err == nil) // false var s1 []int
s2 := []int{} var m map[string]int
m["x"] = 10 // panic m := make(map[string]int)
m["x"] = 10 var ch chan int
ch <- 1 // зависание ch := make(chan int)
ch <- 1