Обложка: 5 заданий с собеседования на позицию Junior Golang-разработчика

5 заданий с собеседования на позицию Junior Golang-разработчика

Тимофей Житков
Тимофей Житков

старший преподаватель в Nordic IT School и Senior Full Stack Developer в агентстве недвижимости

Недавно в нашей IT-школе мы запустили новый курс «Golang-разработчик», который полностью готовит специалистов к позиции Junior.

И поэтому отвечаем на самый популярный вопрос: «что должен уметь начинающий Go-разработчик?».

В основном это работа с JSON API и базами данных. Для этого необходимо иметь представление о срезах, структурах… ну и, конечно, какой Go разработчик без горутин? Здесь представлены некоторые ключевые вопросы, которые необходимо знать на собеседовании на позицию go-разработчика.

Готовы? Тогда GO!!!

Как устроен слайс и чем он отличается от массива?

Срезы (slice) в отличие от массивов могут менять свою длину. То есть можно добавлять новые элементы, или удалять уже существующие.

Также в Go имеется оператор среза : , который позволяет создавать новый срез и содержит указанную последовательность от и до:

// исходный массив
initialUsers := [8]string{"Bob", "Alice", "Kate", "Sam", "Tom", 
"Paul", "Mike", "Robert"}
users1 := initialUsers[2:6] 	// с 3-го по 6-й
users2 := initialUsers[:4]  	// с 1-го по 4-й
users3 := initialUsers[3:]  	// с 4-го до конца
     
fmt.Println(users1)    //["Kate", "Sam", "Tom", "Paul"]
fmt.Println(users2)    //["Bob", "Alice", "Kate", "Sam"]
fmt.Println(users3)    //["Sam", "Tom", "Paul", "Mike", "Robert"]

Что такое горутины и зачем они нужны?

Горутина (goroutine) — это функция, которая выполняется асинхронно. Чтобы запустить горутину нужно лишь написать что-то вроде этого:

go someFunc(args…) {
  //тут действия
  }()

Весит одна горутина около 4кб. Так что, если у вас 4ГБ оперативной памяти, то можно одновременно запустить немало горутин 🙂

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

Какие есть способы достать данные из JSON?

Тут можно либо демаршализовать (Unmarshal) JSON и разлить его данные в объект с фиксированной структурой. Либо можно залить данные в пустой интерфейс.

Для всего этого используется json.Unmarshal()

Расскажите об ООП в Golang

Формально оно в Go есть, но не совсем в том виде, в каком оно есть в PHP или Java.

В Go мы создаем структуры (читайте «классы») с определенными полями (свойствами), и далее создаем «экземпляры» этих структур. Методы описываются отдельно, а не внутри структур.

Если в функции есть return, обязательно ли она вернет то, что указано в return?

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


package main
import "fmt"
 
// Основной метод
func main() {
    // функция возвращает два значения
    m, d := calculator(105, 7)
   
    fmt.Println("105 x 7 = ", m)
 
    fmt.Println("105 / 7 = ", d)
}
// функция с именованными аргументами
 
func calculator(a, b int) (mul int, div int) {

  defer func() {
    mul = 95
    div = 27
  }()
 
    // здесь простое назначение т.к. инициализация произошла выше
  //функция вернет именно эти переменные
    mul = a * b
 
    div = a / b
   
    // здесь у вас есть ключевое слово return
   
    return 1, 2
}

Функция вернет в итоге: 95 и 27.

Вот и все. Желаем успехов на собеседовании!

Хинт для программистов: если зарегистрируетесь на соревнования Huawei Cup, то бесплатно получите доступ к онлайн-школе для участников. Можно прокачаться по разным навыкам и выиграть призы в самом соревновании.

Перейти к регистрации