Назад к задачам
Junior — Senior
11

Определение вывода программы при работе с nil‑интерфейсом и nil‑указателем

Получайте помощь с лайвкодингом в реальном времени с Sobes Copilot
Условие задачи

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

type Order interface {
  GetID() int
}

type orderStruct struct {
  ID int
}

func (o *orderStruct) GetID() int {
  return o.ID
}

func createOrder(shouldCreate bool) Order {
  var order *orderStruct
  fmt.Println("in createOrder: ", order == nil)

  if shouldCreate {
    order = &orderStruct{ID: 1}
  }
  return order
}

func main() {
  order1 := createOrder(true)
  if order1 != nil {
    fmt.Printf("Order1 has ID: %d\n", order1.GetID())
  } else {
    fmt.Println("Order1 is nil")
  }

  order2 := createOrder(false)
  if order2 != nil {
    fmt.Printf("Order2 has ID: %d\n", order2.GetID())
  } else {
    fmt.Println("Order2 is nil")
  }
}