In genBox your code is saying that val contains a pointer to interface{}. In other words its an interface{} that contains a *interface{}. That is a weird but valid construct.
I suggest you dereference it and see what the contained interface holds. Something like: valDeref := val.(*interface{}) fmt.Printf("val contains=%T", valDeref) You may find that valDeref contains the *int64 you are looking for. As an aside, *interface{} is usually an indication that someone somewhere is passing the wrong value to the function since it almost never makes sense to pass a pointer to interface{}. On Mon, 11 Jan 2021, at 4:03 PM, Steve Murphy wrote: > Hello! > > I keep getting: > panic: interface conversion: interface {} is *interface {}, not *int64 > [recovered] > panic: interface conversion: interface {} is *interface {}, not *int64 > > I *suspect* what is happening is that the KDElem struct has an item field > whose > type is interface{}, so that you can store a pointer to some struct (of your > own making), > or an index into an array of structs, or... *whatever*, but in my case, it's > an index into an array > of objects. The itemfunc (or genBox in my test code) is supposed to set the > item field in > the KDElem struct to the proper index, as the struct has just been created, > and the job > of the itemfunc is to make it point to the right object, and set the bounds > info in the new struct. > > type KdElem struct { > item interface{} // a ptr to a particular struct, or an index into > an array of objects, or.... > ... > } > > And the func that calls the itemfunc (genBox) looks like this: > > func loadItems(itemfunc func(arg interface{}, val interface{}, size *KdBox) > int, arg interface{}, extent KdBox, length *int64, mean *float64) *KdElem { > ... > newItem = new(KdElem) > if itemfunc(arg, &newItem.item, newItem.size) != 0 { > ... > > > And, in this case the itemfunc declaration looks like this: > > func genBox(arg interface{}, val interface{}, box *KdBox) int { > var offsetp = arg.(*int64) // successful > var offset = *offsetp // successful > // fmt.Printf("genBox: offset=%v offsetp=%v\n", offset, offsetp) > fmt.Printf("genBox: arg type=%T argval=%v, val type=%T, val > val=%v\n", arg, arg, val, val) > if offset < KDBoxes { > fmt.Printf("genBox: val=%v *int64=%v\n", val, val) > var realval *int64 = val.(*int64) // <<-- This is line 43! > Compiles.... but... Crash!!! > *realval = offset + 1 > ... > > Now, I get this from a go test: > > KdBuild: arg type=*int64 argval=0xc0000d2078; > genBox: arg type=*int64 argval=0xc0000d2078, val type=*interface {}, val > val=0xc0000ba640 > genBox: val=0xc0000ba640 *int64=0xc0000ba640 > --- FAIL: TestKd1 (0.08s) > panic: interface conversion: interface {} is *interface {}, not *int64 > [recovered] > panic: interface conversion: interface {} is *interface {}, not *int64 > > goroutine 19 [running]: > testing.tRunner.func1(0xc000108100) > /usr/lib/go-1.13/src/testing/testing.go:874 +0x3a3 > panic(0x523360, 0xc0000c2360) > /usr/lib/go-1.13/src/runtime/panic.go:679 +0x1b2 > parsetree.com/kdtree.genBox(0x50eec0, 0xc0000d2078, 0x50ef40, 0xc0000ba640, > 0x0, 0x0) > /home/murf/go/kdtree/kdtree1_test.go:43 +0x270 > parsetree.com/kdtree.loadItems(0x5570f8, 0x50eec0, 0xc0000d2078, > 0x7fffffffffffffff, 0x7fffffffffffffff, 0x8000000000000000, > 0x8000000000000000, 0xc00096ab38, 0xc00096ab30, 0x0) > /home/murf/go/kdtree/kdtree.go:683 +0xec > parsetree.com/kdtree.KdBuild(0x5570f8, 0x50eec0, 0xc0000d2078, 0x0) > /home/murf/go/kdtree/kdtree.go:168 +0x17e > parsetree.com/kdtree.TestKd1(0xc000108100) > /home/murf/go/kdtree/kdtree1_test.go:72 +0x13a > testing.tRunner(0xc000108100, 0x5570f0) > /usr/lib/go-1.13/src/testing/testing.go:909 +0 > > How do I set realval to the (*int64) value that's in val? > > murf > > > -- > > Steve Murphy > ParseTree Corporation > 57 Lane 17 > Cody, WY 82414 > ✉ murf at parsetree dot com > ☎ 307-899-0510 > > -- > You received this message because you are subscribed to the Google Groups > "golang-nuts" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to golang-nuts+unsubscr...@googlegroups.com. > To view this discussion on the web visit > https://groups.google.com/d/msgid/golang-nuts/CAPPCp8HGQAcdw7J_vFLW8NKsXqfh5kgUtCrQn41dBLRamQggNA%40mail.gmail.com > > <https://groups.google.com/d/msgid/golang-nuts/CAPPCp8HGQAcdw7J_vFLW8NKsXqfh5kgUtCrQn41dBLRamQggNA%40mail.gmail.com?utm_medium=email&utm_source=footer>. -- You received this message because you are subscribed to the Google Groups "golang-nuts" group. To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/golang-nuts/c109a5c7-e2a2-4905-a187-679142d0da7b%40www.fastmail.com.