tg-me.com/golang_for_two/85
Last Update:
Note #59: Релиз кандидат (RC1) для Go 1.14
Из наиболее значимого в go 1.14 внесли изменения в спецификацию языка, а именно, теперь разрешается встраивать интерфейсы с пересекающимися наборами методов.
Возвращаясь к реальной жизни давайте разберем пример типичного интерфейса:
package userИ допустим у меня есть несколько других пакетов, из которые я тоже хочу доставать информацию о пользователе, поэтому нам необходимо встроить интерфейс user.Database в hardware.Database и тоже самое для wallet.Database:
type Database interface {
GetUser(userID uint64) (model.User, error)
}
package hardwareНу и классика жанра, прилетает задача где нужно создать интерфейс shopping.Database который должен в себе содержать методы hardware.Database и wallet.Database:
type Database interface {
user.Database
SaveDevice(usertID uint64, device model.Device) error
}
package wallet
type Database interface {
user.Database
ReadWallet(userID uint64) (model.Wallet, error)
}
package shoppingИ в go версии меньше чем go 1.14 мы получим ошибку:
type Database interface {
wallet.Database
hardware.Database
Buy(userID uint64, deviceID uint64) error
}
Duplicate method GetUser(userID uint64) (model.User, error)
Если запустить
go1.14rc1 run main.go
то все будет ок 🎉P.S. эта проблема была еще озвучена Алоном Донованом в 2013 году!!! [1]
Links:
[1] spec: allow embedding overlapping interfaces https://github.com/golang/go/issues/6977
[2] Proposal https://github.com/golang/proposal/blob/master/design/6977-overlapping-interfaces.md
BY 🇺🇦 Go for two :)
Warning: Undefined variable $i in /var/www/tg-me/post.php on line 283
Share with your friend now:
tg-me.com/golang_for_two/85