Какие основные паттерны unsafe.Pointer в Go?

Senior
113 просмотров
AFK Offer AI

Шесть легальных паттернов: 1) конвертация *T в *U через unsafe.Pointer, 2) Pointer в uintptr для арифметики (только в одном выражении), 3) reflect.Value.Pointer/UnsafeAddr, 4) syscall передача, 5) преобразование string↔[]byte без копирования, 6) доступ к unexported полям struct. Всё остальное — UB, может сломаться при обновлении Go.

Следующий вопрос

Что выведет: type T struct{}; func (T) M() { fmt.Println("T") }; type S struct { T }; func (S) M() { fmt.Println("S") }; var i interface{ M() } = S{}; i.M()?