1// run 2 3// Copyright 2020 The Go Authors. All rights reserved. 4// Use of this source code is governed by a BSD-style 5// license that can be found in the LICENSE file. 6 7package main 8 9import "reflect" 10 11// complicated enough to require a compile-generated hash function 12type K struct { 13 a, b int32 // these get merged by the compiler into a single field, something typehash doesn't do 14 c float64 15} 16 17func main() { 18 k := K{a: 1, b: 2, c: 3} 19 20 // Make a reflect map. 21 m := reflect.MakeMap(reflect.MapOf(reflect.TypeOf(K{}), reflect.TypeOf(true))) 22 m.SetMapIndex(reflect.ValueOf(k), reflect.ValueOf(true)) 23 24 // The binary must not contain the type map[K]bool anywhere, or reflect.MapOf 25 // will use that type instead of making a new one. So use an equivalent named type. 26 type M map[K]bool 27 var x M 28 reflect.ValueOf(&x).Elem().Set(m) 29 if !x[k] { 30 panic("key not found") 31 } 32} 33