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
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
.