Go main function not operated first

789 views Asked by At
package main
import (
    "bytes"
    "encoding/json"
    "io/ioutil"
    "log"
    "net/http"
    "os"
    "os/signal"
    "strings"
    "unicode/utf8"
    "sync"
    "github.com/robfig/cron"
     cpu "github.com/shirou/gopsutil/cpu"
    "fmt"
)

const NumofResource = 4

// 구조체
type HostInfo struct {
    Hostid string
}

var c *cron.Cron
var lastCPUTimes []cpu.TimesStat

func main() {
    fmt.Println("1.main.go > main() start")
    defer l4g.Close()

var err interface{}
lastCPUTimes, err = cpu.Times(false) //nil
fmt.Println("2.main.go > err", err)
fmt.Println("3.main.go > lastCPUTimes", lastCPUTimes)

if err != nil {
    l4g.Error(err)
}
}

I know that the main function is executed first. However, we confirmed that the library called cpu_windows.go is executed first. Why?

cpu_windows.go : Times(bool) false

cpu_windows.go : common.ProcGetSystemTimes.Call 1

cpu_windows.go : Times(bool) true

cpu_windows.go : return perCPUTimes()

1.main.go : main() start

cpu_windows.go : Times(bool) false

cpu_windows.go : common.ProcGetSystemTimes.Call 1

2.main.go : err

1

There are 1 answers

0
Cerise Limón On

The specification says:

If a package has imports, the imported packages are initialized before initializing the package itself.

and

Program execution begins by initializing the main package and then invoking the function main.

It follows that the initialization code in the imported cpu package is executed before any code in main.