| // Copyright 2024 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 structs |
| |
| // HostLayout marks a struct as using host memory layout. A struct with a |
| // field of type HostLayout will be laid out in memory according to host |
| // expectations, generally following the host's C ABI. |
| // |
| // HostLayout does not affect layout within any other struct-typed fields |
| // of the containing struct, nor does it affect layout of structs |
| // containing the struct marked as host layout. |
| // |
| // By convention, HostLayout should be used as the type of a field |
| // named "_", placed at the beginning of the struct type definition. |
| type HostLayout struct { |
| _ hostLayout // prevent accidental conversion with plain struct{} |
| } |
| |
| // We use an unexported type within the exported type to give the marker |
| // type itself, rather than merely its name, a recognizable identity in |
| // the type system. The main consequence of this is that a user can give |
| // the type a new name and it will still have the same properties, e.g., |
| // |
| // type HL structs.HostLayout |
| // |
| // It also prevents unintentional conversion of struct{} to a named marker type. |
| type hostLayout struct { |
| } |