Этот сайт использует cookies. Продолжение работы с сайтом означает, что Вы согласны!
Передача данных произвольных типов
В предыдущих разделах мы создали функцию 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
}
}
Реквизиты
ЮMoney (Yandex-деньги): 410011140483022
ПАО Сбербанк:
Счет: 40817810855006152256
Реквизиты банка:
Наименование: СЕВЕРО-ЗАПАДНЫЙ БАНК ПАО СБЕРБАНК
Корреспондентский счет: 30101810500000000653
БИК: 044030653
КПП: 784243001
ОКПО: 09171401
ОКОНХ: 96130
Скриншот реквизитов