2017-09-19 7 views
-2
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) 
} 
} 

Je sais que la fonction principale est exécutée en premier. Toutefois, nous avons confirmé que la bibliothèque appelée cpu_windows.go est exécutée en premier. Pourquoi?Fonction principale non utilisée en premier

cpu_windows.go: temps (bool) faux

cpu_windows.go: common.ProcGetSystemTimes.Call 1

cpu_windows.go: temps (bool) vrai

cpu_windows.go: retour perCPUTimes()

1.main.go: main() commencer

cpu_windows.go: temps (bool) faux

cpu_windows.go: common.ProcGetSystemTimes.Call 1

2.main.go: err

Répondre

2

Le specification says:

Si un paquet a les importations, les emballages importés sont initialisés avant d'initialiser le paquet lui-même.

et

L'exécution du programme commence par l'initialisation du paquet principal puis en appelant la fonction principale.

Il en résulte que le initialization code dans le paquet cpu importé est exécuté avant que le code dans main.