Всем привет!
Меня зовут Панасюк Игорь, данный канал посвящен моей школе igoroutine.courses. Здесь будут выходить разные анонсы, интересные задачи и новости.
Подробную информацию обо мне вы можете найти на сайте.
igoroutine_courses
The Nature of Programming
Меня зовут Панасюк Игорь, данный канал посвящен моей школе igoroutine.courses. Здесь будут выходить разные анонсы, интересные задачи и новости.
Подробную информацию обо мне вы можете найти на сайте.
igoroutine_courses
The Nature of Programming
1🔥6❤5👍4⚡1
The Nature of Concurrency — курс, который посвящён многопоточному программированию. В курс вложена не только душа, но и знания, которые можно применить в любом языке, поскольку принципы многопоточного программирования везде одинаковы.
Курс преподаётся на языке Go, подробную информацию о нём можно посмотреть на сайте
▶️ Анонс курса на YouTube
Курс преподаётся на языке Go, подробную информацию о нём можно посмотреть на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
1🔥6❤5👍4⚡1
Как создавался курс?
В курс вложен весь мой личный опыт, связанный с многопоточным программированием. Помимо этого, во время создания курса я консультировался с ведущими разработчиками индустрии, например, общался с Романом Елизаровым — Ex Project Lead разработки языка Kotlin, человеком, который разрабатывал те самые корутины, также я учился многопоточному программированию у него в университете.
Подробную информацию о курсе можно посмотреть на сайте
В курс вложен весь мой личный опыт, связанный с многопоточным программированием. Помимо этого, во время создания курса я консультировался с ведущими разработчиками индустрии, например, общался с Романом Елизаровым — Ex Project Lead разработки языка Kotlin, человеком, который разрабатывал те самые корутины, также я учился многопоточному программированию у него в университете.
Подробную информацию о курсе можно посмотреть на сайте
1❤8🔥5👍4⚡1
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥6
Version: Go 1.24.1
package main
func main() {
m := make(map[any]any)
insert(m, "IGOROUTINE COURSES")
insert(m, 1)
println(len(m))
}
func insert[T any](m map[any]any, a T) {
type Data struct{}
d := Data{}
m[d] = a
}
P.S. Подсвечено красным, ибо IDE старое
Please open Telegram to view this post
VIEW IN TELEGRAM
😱2
😱4
Что будет выведено в stdout?
С точки зрения стандарта языка:
Each type argument is substituted for its corresponding type parameter in the generic declaration. This substitution happens across the entire function or type declaration, including the type parameter list itself and any types in that list.
То есть, тип, объявленный внутри generic-функции insert[T], автоматически захватывает любой T, даже, если сам этот тип не использует T явно.
Таким образом, в будут ключи Data[string] и Data[int] и len(m) == 2.
https://go.dev/play/p/Nl250o6wX2X
Но всё немного тоньше. Если написать сигнатуру
, то итоговый ответ будет , но почему?
https://go.dev/play/p/EkkuBuwtQJ6
Потому что компилятор попытается вывести тип и ему подойдёт только , следовательно, в m будет всегда один ключ Data[any].
Two instantiated types are identical if they are instantiated from the same generic type and with the same full‑form type argument list.
В таких ситуациях нужно внимательно смотреть за выводом типов
🙄 🙄 Ещё больше примеров на курсах
Each type argument is substituted for its corresponding type parameter in the generic declaration. This substitution happens across the entire function or type declaration, including the type parameter list itself and any types in that list.
То есть, тип, объявленный внутри generic-функции insert[T], автоматически захватывает любой T, даже, если сам этот тип не использует T явно.
Таким образом, в
mНо всё немного тоньше. Если написать сигнатуру
func insert[T comparable](m map[any]T, a T)1Потому что компилятор попытается вывести тип
TanyTwo instantiated types are identical if they are instantiated from the same generic type and with the same full‑form type argument list.
В таких ситуациях нужно внимательно смотреть за выводом типов
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥9
Кстати, курс The Nature Of Concurrency начинается совсем скоро, нас уже более 20 человек! Не упусти свой шанс стать мастером многопоточного программирования!
1❤7
Forwarded from Igor Panasyuk | IGORoutine Programming
Версия:
ARM64 Go compiler 1.24.2
package main
import (
"fmt"
)
type Key struct {
ID int
Callback func()
}
var globalMap = map[any]any{}
func main() {
callback := func() {
fmt.Println("@igoroutine")
}
key1 := Key{
ID: 1,
Callback: callback,
}
key2 := Key{
ID: 1,
Callback: callback,
}
insert[Key](key1)
insert[Key](key2)
fmt.Println(len(globalMap))
}
func insert[T any](key T) {
globalMap[key] = 27
}
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔4🔥3❤2
Forwarded from Igor Panasyuk | IGORoutine Programming
😱6❤2🔥2