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
Go — 100 вопросов/заданий с собеседований