1. Go / Говнокод #27411

    +1

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    9. 9
    func getTransport(tt string) (iTransport, error) {
    	if tt == "scooter" {
    		return newElectricScooter(), nil
    	}
    	if tt == "quadcopter" {
    		return newQuadcopter(), nil
    	}
    	return nil, fmt.Errorf("Wrong type")
    }

    https://habr.com/ru/post/556512/
    > Factory Method Pattern
    > Привет, друзья. С вами Alex Versus.
    > Ранее мы говорили про шаблоны проектирования Одиночка и Стратегия, про тонкости реализации на языке Golang.
    > Сегодня расскажу про Фабричный метод.

    PolinaAksenova, 10 Мая 2021

    Комментарии (48)
  2. Go / Говнокод #27395

    +1

    1. 1
    2. 2
    3. 3
    if req.Lang != "" {
    	req.Lang = "EN"
    }

    Я сказал английский!

    [Поставленная задача: если пришёл запрос без поля, поставить значение по умолчанию]

    anon007, 06 Мая 2021

    Комментарии (20)
  3. Go / Говнокод #27261

    +1

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    // https://docs.docker.com/engine/api/v1.24/#create-a-container
    
    POST /v1.24/containers/create HTTP/1.1
    Content-Type: application/json
    Content-Length: 12345
    
    {
           "Hostname": "",
           "Domainname": "",
           "User": "",
           "AttachStdin": false,
           "AttachStdout": true,
           "AttachStderr": true,
           "Tty": false,
           "OpenStdin": false,
           "StdinOnce": false,
           "Env": [
                   "FOO=bar",
                   "BAZ=quux"
           ],
           ...
    }

    Ядро предоставляет сисколл execve. Execve принимает переменные окружения в виде массива строк A=B -
    не знаю конкретных причин, почему так сделано, но скорее всего просто потому что писать хэшмапу под
    это дело, которая еще и будет выкинута из памяти через относительно небольшое время - дело дорогое и
    ненужное, плюс наверняка какой-нибудь лишний пердолинг со стеком.
    https://man7.org/linux/man-pages/man2/execve.2.html

    Го, "человеческий язык" с поддержкой обычных мап из коробки, ничтоже сумляшеся не замечает никакой
    проблемы и заставляет пользователя передавать переменные окружения в том же формате, потому что у
    языка не только синтаксис должен быть таким же тупым, как программист на нём и вообще мы же тут
    делаем вид, что мы C, только лучше.
    https://golang.org/pkg/os/exec/#example_Command_environment

    Докер, "человеческий сервис" с HTTP API, использующим формат JSON с поддержкой обычных мап из коробки,
    ничтоже сумляшеся не замечает никакой проблемы и заставляет пользователя передавать переменные
    окружения в том же формате, потому что на программист на языке должен быть тупым, как этот язык.
    https://docs.docker.com/engine/api/v1.24/#create-a-container

    В результате мы имеем пачку долбоебов, из-за которых оперирующие (мапами / объектами / словарями / как угодно назовите)
    нормальные люди должны вести себя как типичные гошники.

    Fike, 17 Февраля 2021

    Комментарии (42)
  4. Go / Говнокод #26985

    0

    1. 1
    2. 2
    func verbMatches(p abac.Policy, a authorizer.Attributes) bool {
    	// TODO: match on verb

    серёга, задолбал, давай уже в прод катить, потом свою авторизацию сделаешь

    https://github.com/kubernetes/kubernetes/blob/master/pkg/auth/authorizer/abac/abac.go#L178

    Fike, 28 Сентября 2020

    Комментарии (14)
  5. Go / Говнокод #26841

    0

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    switch platform {
    case "Azure":
    	heartbeat = "500"
    default:
    	heartbeat = "100"
    }

    Инфраструктуру для мимосервисов чай тоже люди пишут.

    https://github.com/openshift/cluster-etcd-operator/blob/release-4.5/pkg/cmd/render/env.go#L52-L81

    [size=8]там еще и табы[/size]

    Fike, 04 Августа 2020

    Комментарии (72)
  6. Go / Говнокод #26743

    0

    1. 1
    https://m.vk.com/wall-30666517_1672469

    Из исходников и документации Go убрали фразы whitelist/blacklist и master/slave.
    Всё из-за протестов, которые сейчас проходят в Америке.

    Фразы «blacklist» и «whitelist» заменили на «blocklist» и «allowlist», а «master» и «slave»
    в зависимости от контекста на «process», «pty», «proc» и «control».

    Отмечается, что изменения не приведут к нарушению обратной совместимости и путанице, так как
    большая часть исправлений приходится на комментарии, тесты и внутренние переменные.

    OlegUP, 08 Июня 2020

    Комментарии (77)
  7. Go / Говнокод #26717

    0

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    func GetUser() *User {
        defer func() {
            time.Sleep(100 * time.Millisecond)
        }()
        return &User{}
    }

    Паттерн: поработал - отдохни.

    Pattern: worked hard - have a rest

    anon007, 01 Июня 2020

    Комментарии (6)
  8. Go / Говнокод #26716

    +1

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    func (svc *UserSvc) isEmptyName(name model.User_Name) bool {
      if name.First.RU == "" {
        if name.First.EN == "" {
          if name.First.TR == "" {
            if name.First.IT == "" {
              if name.Last.RU == "" {
                if name.Last.EN == "" {
                  if name.Last.TR == "" {
                    if name.Last.IT == "" {
                      return true
                    }
                  }
                }
              }
            }
          }
        }
      }
      return false
    }

    Проверка заполненности имени пользователя хотя - бы на одном из языков.

    anon007, 01 Июня 2020

    Комментарии (54)
  9. Go / Говнокод #26599

    −1

    1. 1
    2. 2
    3. 3
    4. 4
    Currently, we're ignoring failures to mlock signal stacks in the
    workaround for #35777. This means if your mlock limit is low, you'll
    instead get random memory corruption, which seems like the wrong
    trade-off.

    самый лучший язык на свете продолжает шпарить, отказались от free after use - получили «забыл сделать if (err != nil)»

    https://github.com/golang/go/commit/69614c0d0e05787c8203bdc364c3293e1cf5094a

    Fike, 24 Апреля 2020

    Комментарии (26)
  10. Go / Говнокод #26520

    +3

    1. 1
    2. 2
    3. 3
    4. 4
    // sumEqual reports whether u + v == w exactly.
    func sumEqual(u, v, w float64) bool {
    	return (u+v == w) && (u == w-v) && (v == w-u)
    }

    https://github.com/golang/geo/blob/a8523298cefedcf7b70bbbf4eeef24cbb3258376/s2/edge_clipping.go#L182

    походу питух-затейник опять сбежал

    Fike, 21 Марта 2020

    Комментарии (61)