cpp

Передача данных произвольных типов

В предыдущих разделах мы создали функцию Sum(), предназначенную для суммирования двух целых чисел. В один прекрасный момент возникнет ситуация, когда потребуется произвести суммирование вещественных чисел. Что в этом случае делать? Создавать функцию с другим названием? Да! Язык Go увы не поддерживает перегрузку функций. Перегрузка функции — это возможность использования одного названия для нескольких функций, различающихся типом параметров или их количеством. Так что придется создать функцию с другим названием.

Если в качестве типа данных параметра указать пустой интерфейс (interface{}), то в функцию можно будет передать данные произвольного типа. Это один из способов решения проблемы с отсутствием перегрузки функций. Передать данные произвольного типа это лишь половина дела. Чтобы с этими данными выполнять какие-либо действия, нужно выполнить преобразование типов. Это в свою очередь требует умения определить тип данных, хранимых в переменной в данный момент времени. Если типы данных не совпадают, то будет ошибка на этапе выполнения и программа прекратит выполнение досрочно. Напомню, что процесс преобразования типов мы уже рассматривали в разд. 2.11.

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

Листинг 10.10. Передача данных произвольных типов

package main

import "fmt"

func main() {
   fmt.Println(Sum(10, 20))    // 30
   fmt.Println(Sum(12.5, 1.3)) // 13.8
   // fmt.Println(Sum(12, 1.3))
   // panic: interface conversion: interface {} is float64, not int
}
func Sum(x, y interface{}) interface{} {
   switch v := x.(type) {
   case int:
      return v + y.(int)
   case float64:
      return v + y.(float64)
   default:
      return 0
   }
}

Учебник Go (Golang)
Учебник Go (Golang) в формате PDF

Помощь сайту

ЮMoney (Yandex-деньги): 410011140483022

ПАО Сбербанк:
Счет: 40817810855006152256
Реквизиты банка:
Наименование: СЕВЕРО-ЗАПАДНЫЙ БАНК ПАО СБЕРБАНК
Корреспондентский счет: 30101810500000000653
БИК: 044030653
КПП: 784243001
ОКПО: 09171401
ОКОНХ: 96130
Скриншот реквизитов

cpp