It is, in fact, a method on an embedded type. That means I can document it and it ceases to be a magic number! Thanks.
On Aug 14, 2016 12:27 PM, "Ian Lance Taylor" <i...@golang.org> wrote: > On Sun, Aug 14, 2016 at 11:10 AM, 'Tim Hockin' via golang-nuts > <golang-nuts@googlegroups.com> wrote: > > I was playing with a method that wants to print the file:line of the > > caller. `runtime.Caller(1)` seems like it should do the trick, but I > > get '<autogenerated>:2'. If I call `runtime.Caller(2)` instead it > > seems to work, but I don't know why, so I am reluctant to depend on > > that. > > > > Can anyone enlighten me? How can I know how many frames to crawl back > > to my real caller? > > > > go1.6.1 on linux/amd64 > > An `autogenerated` frame means that you are calling a method that is > defined on some type T1 that is embedded in some other type T2. The > `autogenerated` code is the little wrapper that takes a value of type > T2 and invokes the method on the embedded field of type T1. As far as > I know you will never see autogenerated code called by autogenerated > code. So you only need to worry about this in a method of a type that > your program will embed into some other type. If you don't know at > run time whether the type is embedded or not, call runtime.Caller(1), > and if you see autogenerated call runtime.Caller(2). > > Ian > -- 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. For more options, visit https://groups.google.com/d/optout.