TGViewer
Go for Devs Go for Devs @go_for_devs · 852 subscribers
Post #50 572
🌀 Zero value в Go: меньше кода, меньше багов

Go делает одну крутую вещь за вас — при объявлении переменных они всегда получают предсказуемое zero value: 0, false, "" или nil.

Многие программисты зря делают make() или явно инициализируют структуры, добавляя лишний код. А значит — повышают вероятность появления багов и забытых для инициализации полей.

Стоит проектировать типы так, чтобы их zero value сразу был полезен. Например, sync.Mutex готов к работе «из коробки»:


package main

import "sync"

type MyInt struct {
mu sync.Mutex
val int
}

func main() {
var i MyInt

i.mu.Lock()
i.val++
i.mu.Unlock()
}


То же самое с bytes.Buffer: можно просто объявить переменную и сразу писать в неё:


package main

import "bytes"
import "io"
import "os"

func main() {
var b bytes.Buffer
b.Write([]byte("Hello world"))
io.Copy(os.Stdout, &b)
}


Слайсы? Их zero value — nil, но это не мешает их использовать:


package main

import "fmt"
import "strings"

func main() {
// s := make([]string, 0)
// s := []string{}
var s []string

s = append(s, "Hello")
s = append(s, "world")
fmt.Println(strings.Join(s, " "))
}


А ещё на nil-указателях можно вызывать методы:


package main

import "fmt"

type Config struct {
path string
}

func (c *Config) Path() string {
if c == nil {
return "/usr/home"
}
return c.path
}

func main() {
var c1 *Config
var c2 = &Config{
path: "/export",
}
fmt.Println(c1.Path(), c2.Path())
}


При проектировании своих структур подумайте — что должен делать zero value вашего типа? Если ответ «ничего полезного» — возможно, стоит пересмотреть дизайн.

#go_tips@go_for_devs
  • 🔥 7
  • 👍 4
  • ❤ 2
More from @go_for_devs
  1. Sep 30, 2026Тут больше не будет новостей, статей и постов про Go. Go-разработчику сейчас важнее не син…
  2. Apr 16, 2026⚡️ Anthropic выпустили Claude Opus 4.7 Cursor зафиксировал рост с 58% до 70% на своём бенч…
  3. Feb 11, 2026🥳 Состоялся релиз Go 1.26 В релиз вошли несколько заметных изменений: 1. Функция new тепе…
  4. Jan 29, 2026Post #116
  5. Jan 22, 2026Помните, осенью мы писали про запуск опроса Go Survey 2025. Так вот, вчера команда Go опуб…
  6. Jan 21, 2026Философский подход к бэкенду
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →