I tried to write the SSA information out and found the *init$guard *which 
is likely to decide the execution of the sub-packages *init *functions.

For example, give the following go code, I will get the SSA output.

package main

import "fmt"
import _ "unsafe"

const message = "Hello, World!"

func init(){}

func main() {
fmt.Println(message)
}

func empty(){}

The output is shown below. Based on the code, I have a rough idea  that the 
variable *init$guard *might be set by someone to control the execution of 
*init*. However, i failed to find the documentation about it when I search 
"init$guard", "package initializer" and so on. Could someone help to 
explain how it works and which component sets up the variable. 















*# Name: hello.init# Package: hello# Synthetic: package initializerfunc 
init():0:                                                               
 entry P:0 S:2        t0 = *init$guard                                     
              bool        if t0 goto 2 else 11:                             
                              init.start P:1 S:1        *init$guard = 
true:bool        t1 = fmt.init()                                           
           ()        t2 = unsafe.init()                                     
              ()        t3 = init#1()                                       
                 ()        jump 22:                                         
                   init.done P:2 S:0        return*

-- 
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/b851ef80-838c-4bbb-b575-508ae1988f39n%40googlegroups.com.

Reply via email to