Sure. I just found it a very interesting 'corner' of the language I have run up against. However, I do have what I think is an ingenious solution which unfortunately cannot fit in the margin of this email :). It's actually working rather well for my purposes, and I've proposed it already to the author of go-callvis. We'll see where it goes.
I think given the Go philosophy of keeping the language itself simple, a convention for annotating goroutines (and defer blocks which also show up in graphvis in the same manner) via comments might be best. A post-processing tool to catch these comments and fix up the graphviz .dot output is already showing promise in achieving what I am after. -Russ On Sun, 25 Nov 2018 at 20:13, Michael Jones <michael.jo...@gmail.com> wrote: > just saying the we could make it so. the full name (for a func local var) > would be funcName_varName_instanceNumber in some formatting. > > i think you're up against a "go attitude" decision here but it could help > support the tooling spirit...would be nice to see the list if these at exit > to quickly spot leaking > > On Sun, Nov 25, 2018 at 8:05 PM Russtopia <rma...@gmail.com> wrote: > >> Perhaps I misunderstand what you suggest, but I tried >> >> func A() { >> ... >> descriptivelyNamedGoroutine := func() { >> ... >> } >> ... >> descriptivelyNamedGoroutine() >> ... >> >> Alas, the 'dot' tool used by go-callvis doesn't seem to obtain any >> additional info from this. The resulting diagram still just labels the >> goroutine A$1. >> Perhaps a limitation of go-callvis itself; I've mailed the author with >> this issue to see what he/she thinks about it. >> >> >> On Sun, 25 Nov 2018 at 16:36, Dan Kortschak < >> dan.kortsc...@adelaide.edu.au> wrote: >> >>> A way around that might be to use the name of the variable that holds >>> the anonymous function, defaulting to func#n when it's a func literal. >>> This should be able to be gleaned from the analysis. >>> >>> On Sun, 2018-11-25 at 16:04 -0800, Russtopia wrote: >>> > That still doesn't address what I'm getting at -- it doesn't give a >>> > semantically meaningful name to the goroutines, in stack traces, >>> > source >>> > code, or in code visualization tools such as graphviz diagrams. >>> > >>> > What does that goroutine actually *do*? Is it a worker for some >>> > specific >>> > purpose, does it read from stdin and forward to a pty/socket, does it >>> > wait >>> > for data on some channel, does it sleep until a particular event >>> > occurs and >>> > then reboot the box ... ? 'EnclosingFunc$1', 'EnclosingFunc$2' aren't >>> > very >>> > useful names for documentation and the current Go syntax allows no >>> > specification of this by naming the goroutine itself, short of moving >>> > it >>> > completely out of the scope of the enclosing named function, and >>> > losing the >>> > benefits of a closure. >>> > >>> > I guess what I'm getting at is that goroutines can't be named for >>> > what they >>> > *mean* or *do*. Comments can of course explain this within the source >>> > code, >>> > but I think there would be a concrete benefit to defining a >>> > convention for >>> > comment-tagging goroutines, in provide this foothold for external >>> > documentation tools; or, perhaps even better, a way to actually name >>> > goroutines like how GCC allows named, nested functions. This could >>> > even >>> > improve the readability of stack traces could it not? >>> > >>> > I've already devised a 'comment above each goroutine' hack, plus a >>> > post-processing tool (basically a sed script) to massage the output >>> > of the >>> > graphviz 'dot' data, where I place info above each goroutine so it >>> > can be >>> > renamed in the output diagram. That addresses the naming issue within >>> > graphviz diagrams for me, for now. >>> > >>> > >>> > On Sun, 25 Nov 2018 at 15:28, Dan Kortschak <dan.kortschak@adelaide.e >>> > du.au> >>> > wrote: >>> > >>> > > >>> > > That package doesn't introspect on running code, so a goroutine >>> > > name is >>> > > not necessary. go-callvis could label the anonymous functions by >>> > > their >>> > > filepath:line number or something else. >>> > > >>> > > On Sun, 2018-11-25 at 15:12 -0800, Russtopia wrote: >>> > > > >>> > > > I recently tried out a go tool for outputting code structure >>> > > > visualization >>> > > > using graphviz -- https://github.com/TrueFurby/go-callvis >>> > > > >>> > > > I found that goroutines are just labelled <enclosing function>$1 >>> > > > or >>> > > > similar >>> > > > by go-callvis. I could of course be wrong, but my thinking is >>> > > > that >>> > > > this is >>> > > > not really a shortcoming of graphviz, but rather a lack of >>> > > > support >>> > > > for >>> > > > naming goroutines within the language itself as goroutines are >>> > > > also >>> > > > 'unnamed' in this sense within stack traces. It would aid in >>> > > > understanding >>> > > > the purpose of goroutines within a structure diagram if >>> > > > goroutines >>> > > > could be >>> > > > named somehow. >>> > > > >>> > > > I was hoping there was a way within Go to give goroutines >>> > > > meaningful >>> > > > names >>> > > > in such a way that graphviz-like tools could pick up on it and >>> > > > make >>> > > > meaningful annotations. >>> > > > >>> > > > The runtime would, I suppose, also have to suffix a goroutine ID >>> > > > to a >>> > > > goroutine's name, since calling a function that contained >>> > > > goroutines >>> > > > repeatedly would result in multiple instances of each goroutine. >>> > > > >>> > > > >>> > > > On Fri, 23 Nov 2018 at 22:36, <alex.besogo...@gmail.com> wrote: >>> > > > >>> > > > > >>> > > > > >>> > > > > Debugging. For example, if I have a deadlocked request I might >>> > > > > want >>> > > > > to >>> > > > > attach with a debugger and find where exactly it's stuck. >>> > > > > >>> > > > > Right now this is complicated, you have to examine stacks of >>> > > > > all >>> > > > > goroutines to find the correct one. >>> > > > > >>> > > > > On Friday, November 23, 2018 at 9:24:42 PM UTC-8, Andrei Avram >>> > > > > wrote: >>> > > > > > >>> > > > > > >>> > > > > > >>> > > > > > What's the need for this? >>> > > > > -- >>> > > > > 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. >>> > > > > >>> -- >>> CRICOS provider code 00123M >>> >>> -- >> 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. >> > > > -- > > *Michael T. jonesmichael.jo...@gmail.com <michael.jo...@gmail.com>* > -- 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.