Goroutines and Channels and Select 多线程首先创建多线程方法:func f(from string) { for i := 0; i < 3; i++ { fmt.Println(from, ":", i) }}f("direct")go f("goroutine")go func(msg string) { fmt.Println(msg)}("going")time.Sleep(time.Second)fmt.Println("done")direct : 0direct : 1direct
Exit and Status 通过os.Exit,程序将以给定的状态退出运行。defer fmt.Println("!")os.Exit(3)编译并运行程序:% ./exit% echo $?3从命令行输出可以看出,defer未执行。
Signals signal.Notify通过channel接收系统的信号。sigs := make(chan os.Signal, 1)signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM)done := make(chan bool, 1)go func() { sig := <-sigs fmt.Println() fmt.Println(sig) done <- true}()fmt.Println("awaiting signal"
Spawning Processes and Exec‘ing Processes 衍生外部进程dateCmd := exec.Command("date")dateOut, err := dateCmd.Output()if err != nil { panic(err)}fmt.Println("> date")fmt.Println(string(dateOut))> date2022年 4月20日 星期三 19时16分44秒 CSTexec.Command的执行结果,与在命令行中执行的结果一致。grepCmd := exec.Command(
HTTP Clients and Servers and Context HTTP请求resp, err := http.Get("http://gobyexample.com")if err != nil { panic(err)}defer resp.Body.Close()fmt.Println("Response status:", resp.Status)scanner := bufio.NewScanner(resp.Body)for i := 0; scanner.Scan() && i < 5; i++ { fmt.Prin
Environment Variables 环境变量是向程序传递系统配置信息的通用机制。for _, e := range os.Environ() { pair := strings.SplitN(e, "=", 2) fmt.Println(pair[0])}USER__CFBundleIdentifierCOMMAND_MODELOGNAMEPATHSSH_AUTH_SOCKSHELLHOME__CF_USER_TEXT_ENCODINGTMPDIRXPC_SERVICE_NAMEXPC_FLAGSORIG
Command-Line 命令行参数argsWithProg := os.ArgsargsWithoutProg := os.Args[1:]fmt.Println(argsWithProg)fmt.Println(argsWithoutProg)命令行中运行程序并输入:./command-line-arguments a b c d命令行输出:[./command-line-arguments a b c d][a b c d]命令行标志wordPtr := flag.String("word",