Pull to refresh

Comments 14

Как легче всего проверить срез на пустоту?

package main
import "fmt"
func main() {
  r := [3]int{1, 2, 3}
  if len(r) == 0 {
    fmt.Println("Empty!")
  } else {
    fmt.Println("Not Empty!")
  }
}

Вопрос про срез, а в примере массив

Очень полезные топики как для собеседующего, так и собеседуемого. Спасибо.

json.Unmarshal() - для чтения JSON-строки и преобразования ее в структуру

А потом вам прилетает JSON не фиксированной структуры и это всё идёт по п**де.
Или это уже на миддла?))

func swap() []int {
a, b := 15, 10
b, a = a, b
return []int{a, b}
}

Гениально. Тогда уж сразу верните в целевом порядке, раз уж значения не зависят от входных аргументов.

Простите, не очень опытен в go. Будет ли правильным решение - func Swap(x,y int) (int, int) { return y,x}

Так тут дело не в порядке переменных же)
swap меняет именно значения, которые были в переменных a и b.
Считаем что для тебя эта функция черный ящик.
Значит, передав туда переменные a=10 и b=15 и присвоив возвращаемое значение этой функции снова этим переменным, то ожидаем увидеть что в переменной a будет значение 15, а в переменной b - 10.

Вы не заметили, но автор написал функцию без входящих аргументов.

Ребята, джуны-гошники, которые пришли сюда по ссылкам типа "Очень полезный набор вопросов на собеседовании", пожалуйста не читайте эту статью или развидьте ее, если уже прочитали. Тут полно серьезных ошибок и на взрослом собесе по го вас за такие ответы разъ... эээ ... раздраконят.
Остановлюсь только на одной:

Ошибка в одном потоке (например, segmentation fault) обычно не влияет на другие потоки.

Ни один человек, который сталкивался с segmentation fault такого не напишет. Откуда взялась эта фраза? Ну, вы наверное, догадались, ChatGPT в одной из версий так галлюцинировала. Теперь это разнеслось по вот таким статьям, по поисковой выдаче и скоро на всех собеседованиях страны ...

Ну согласитесь, что шпаргалка для джунов должна содержать определенный комплект ошибок .. включать голову и сверяться с описанием автор не отменял вроде бы!

А тем, кто дотошно пройдет все 100 вопросов и найдет все такие места .. пожалуй можно и миддла выдать. ;)

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

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

Ошибки есть много где. Если исходить из вашей теории, в принципе кроме пары книг читать новичкам ничего нельзя. Может это и правильно, но это не работает. Люди хотят более простую подачу. И да, где-то они обожгутся, а где-то и сами могу неверно интерпретировать правильно прочитанный ответ.

Поэтому, начинающие, читайте, но проверяйте.

Согласен. Автору огромное спасибо за то, что собрал материал воедино и проделал такую большую работу по презентации ответов. Однако в некоторых местах они меня смущали и я перепроверял их. Есть моменты, где автор ошибается, поэтому, читающие, будьте бдительны и перепроверьте на go playground, если сомневаетесь

Да дичь иногда, согласен.

#72, #81 реализованы неправильно

#82 в корне неверно описано, хотя, казалось бы, там читать три строчки - https://yourbasic.org/golang/type-alias/.

Да, товарищи джуны, будьте осторожны при выходе из последней двери последнего вагона (с).

Объединить несколько каналов в один можно без дополнительных горутин, но с помощью рефлексии: https://pkg.go.dev/reflect#Select. Полезно посмотреть на оба подхода и посравнивать.

Согласен с комментатором выше, в статье действительно много ошибок или упущенных тонкостей.

Ответ на вопрос "Если в функции есть return, обязательно ли она вернет то, что указано в return?" указан с очень странной грубой ошибкой.

В статье говорится: "Но в Go есть интересная особенность: если есть именованный выходной параметр (параметры), то функция вернет последнее его значение, несмотря на то, что написано в return."

Мне не удалось беглым поиском подтвердить, что это хоть когда-то работало так, как описано в статье. Как минимум с версии Go 1.20, если в return явно указаны аргументы, они и будут возвращены. Собственно, если пример кода из статьи запустить в песочнице Go, то мы увидим, что возвращаются указанные значения, а не значения, последними присвоенные именованным переменным: https://go.dev/play/p/QYGTrnKLi5y

Sign up to leave a comment.

Articles