/
githubmirror
/
go
Обзор
Документация
Войти
/
githubmirror
/
go
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
test/fixedbugs/issue77779.go
45 строк
932 B
Keith Randall
reflect: use &zeroVal[0] instead of nil for data field for zero-sized payloads
25 фев 2026, 07:51
25 фев 2026, 07:51
60dc964
Код
Авторство
О чём код?
// run // Copyright 2026 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package main import ( "reflect" ) type Renderer interface { Render() error } type ZeroSize struct{} func (ZeroSize) Render() error { return nil } type Data struct { X, Y, Z int } // Container is pointer-sized (8 bytes): zero-size embed + one pointer field. // This triggers Go 1.26 interface inlining, which produces a nil data pointer // for the zero-size field when extracted via reflect.Value.Interface(). type Container struct { ZeroSize Data *Data } func main() { render(Container{}) render(&Container{}) } func render(iface any) { if reflect.ValueOf(iface).Kind() == reflect.Ptr { _ = reflect.ValueOf(iface).Elem().Field(0).Interface().(Renderer).Render() return } _ = reflect.ValueOf(iface).Field(0).Interface().(Renderer).Render() }