#Generics in Go
Pass interfaces
Generic functions can easily be written - this require the caller to use variables of the empty interface type. The empty interface can hold a value of any type.
В интернетах только и разговоров, что об отсутствии дженериков в Go...
В Go нет дженериков?
Зато есть ещё более шикарный хак!
Обобщённые типы для функций/методов и их параметров могут создаваться через пустые интерфейсы, которые могут содержать значения любого типа.
При этом параметры в обобщённую функцию передаются по ссылке, интерфейсы передаются через указатели и все операции с интерфейсами и параметрами происходят через указатели.
Таким образом вся реализация дженериков сводится к операциям через указатели с переменными, тип которых определён пустыми интерфейсами, т.е. всё сводится к операциям с интерфейсами!
Интерфейсы и модули - это сила структурного программирования!
Pass interfaces
Generic functions can easily be written - this require the caller to use variables of the empty interface type. The empty interface can hold a value of any type.
package main
import "fmt"
func swap(a, b *interface{}) {
*a, *b = *b, *a
}
func main() {
var a, b interface{} = 3, "four"
fmt.Println(a, b)
swap(&a, &b)
fmt.Println(a, b)
}
Output:
3 four
four 3
В интернетах только и разговоров, что об отсутствии дженериков в Go...
В Go нет дженериков?
Зато есть ещё более шикарный хак!
Обобщённые типы для функций/методов и их параметров могут создаваться через пустые интерфейсы, которые могут содержать значения любого типа.
При этом параметры в обобщённую функцию передаются по ссылке, интерфейсы передаются через указатели и все операции с интерфейсами и параметрами происходят через указатели.
Таким образом вся реализация дженериков сводится к операциям через указатели с переменными, тип которых определён пустыми интерфейсами, т.е. всё сводится к операциям с интерфейсами!
Интерфейсы и модули - это сила структурного программирования!
Опубликованы результаты исследования сообщества пользователей Go на основе проведённого в декабре прошлого года опроса. В ноябре прошлого года проекту языка Go исполнилось семь лет.
https://blog.golang.org/survey2016-results
Из исследования видно шаблонное мышление массы участников и что информация об изменениях, нововведениях и токостях работы языка и компилятора Go не достигает пользователей языка - люди по прежнему хотят дженерики, контроль зависимостей и IDE, когда в Go это всё есть (generics, Gogland IDE) и многое даже было изначально (модульность и контроль зависимостей, через go build).
Чего действительно не хватает в Go так это единой и стройной экосистемы/инфраструктуры/репозитория пакетов и документации (однако, есть go doc и https://godoc.org), и хорошего пакетного менеджера в Tools языка (однако, есть go get, go install, go list), тесно интегрированного с Git и GitHub, и Go Tools (go fmt, import correction).
Менеджеров пакетов очень много:
https://github.com/golang/go/wiki/PackageManagementTools
Есть нативные встроенные возможности Go Tools (go get, go install, go list, go build):
https://golang.org/cmd/go/#hdr-Download_and_install_packages_and_dependencies
https://golang.org/cmd/go/
https://golang.org/cmd/
https://golang.org/doc/cmd
https://golang.org/doc/
https://blog.golang.org/survey2016-results
Из исследования видно шаблонное мышление массы участников и что информация об изменениях, нововведениях и токостях работы языка и компилятора Go не достигает пользователей языка - люди по прежнему хотят дженерики, контроль зависимостей и IDE, когда в Go это всё есть (generics, Gogland IDE) и многое даже было изначально (модульность и контроль зависимостей, через go build).
Чего действительно не хватает в Go так это единой и стройной экосистемы/инфраструктуры/репозитория пакетов и документации (однако, есть go doc и https://godoc.org), и хорошего пакетного менеджера в Tools языка (однако, есть go get, go install, go list), тесно интегрированного с Git и GitHub, и Go Tools (go fmt, import correction).
Менеджеров пакетов очень много:
https://github.com/golang/go/wiki/PackageManagementTools
Есть нативные встроенные возможности Go Tools (go get, go install, go list, go build):
https://golang.org/cmd/go/#hdr-Download_and_install_packages_and_dependencies
https://golang.org/cmd/go/
https://golang.org/cmd/
https://golang.org/doc/cmd
https://golang.org/doc/
Telegram
Technologique
#Generics in Go
Pass interfaces
Generic functions can easily be written - this require the caller to use variables of the empty interface type. The empty interface can hold a value of any type.
package main
import "fmt"
func swap(a, b *interface{})…
Pass interfaces
Generic functions can easily be written - this require the caller to use variables of the empty interface type. The empty interface can hold a value of any type.
package main
import "fmt"
func swap(a, b *interface{})…