編碼的實現環境是go1.15.6、LiteIDE X37.3、win7。是《Go語言聖經》的練習及作業,個別程式碼有修改,僅供交流學習之用。
// Boiling prints the boiling point of water.
package mainimport "fmt"const boilingF = 212.0func main() { var f = boilingF var c = (f - 32) * 5 / 9 fmt.Printf("boiling point = %goF or %goC \n", f, c) // Output: // boiling point = 212°F or 100°C}
// Ftoc prints two Fahrenheit-to-Celsius conversions.
package mainimport "fmt"const boilingF = 212.0func main() { const freezingF, boilingF = 32.0, 212.0 fmt.Printf("%goF = %goC \n", freezingF, fToC(freezingF)) fmt.Printf("%goC = %goF \n", boilingF, fToC(boilingF))}func fToC(f float64) float64 { return (f - 32) * 5 / 9}
// Echo4 prints its command-line arguments.
// 指標是實現標準庫中flag包的關鍵技術,它使用命令列引數來設定對應變數的值。
package mainimport ( "fmt" "flag" "strings")// 呼叫flag.Bool函式會建立一個新的對應布林型標誌引數的變數。它有三個屬性:// 第一個是命令列標誌引數的名字“n”,然後是該標誌引數的預設值(這裡是false),最後是該標誌引數對應的描述資訊。// 如果使用者在命令列輸入了一個無效的標誌引數,或者輸入-h或-help引數,那麼將列印所有標誌引數的名字、預設值和描述資訊。var n = flag.Bool("n", false, "省略行尾換行符(omit trailing newline)")var sep = flag.String("s", " ", "分隔符(separator)") //呼叫flag.String函式將建立一個對應字串型別的標誌引數變數。func main() { // 當程式執行時,必須在使用標誌引數對應的變數之前先呼叫flag.Parse函式,用於更新每個標誌引數對應變數的值(之前是預設值)。 // 如果在flag.Parse函式解析命令列引數時遇到錯誤,預設將列印相關的提示資訊,然後呼叫os.Exit(2)終止程式。 flag.Parse() // 對於非標誌引數的普通命令列引數可以透過呼叫flag.Args()函式來訪問,返回值對應一個字串型別的slice。 fmt.Print(strings.Join(flag.Args(), *sep)) // sep和n變數分別是指向對應命令列標誌引數變數的指標 if !*n { fmt.Println() } var ii int var ss string var bb bool var ff interface{} fmt.Printf("整型、字串型、布林型、空介面的預設值分別是:", ii, ss, bb, ff) // Output: // boiling point = 212°F or 100°C}
// Cf converts its numeric argument to Celsius and Fahrenheit.
// 執行命令:go run cf.go 22
package mainimport ( "fmt" "os" "strconv" "gopl.io/tempconv")func main() { for _, arg := range os.Args[1:] { t, err := strconv.ParseFloat(arg, 64) if err != nil { fmt.Fprintf(os.Stderr, "cf: %v\n", err) os.Exit(1) } fmt.Println(t) f := tempconv.Fahrenheit(t) c := tempconv.Celsius(t) fmt.Printf("%s = %s, %s = %s\n", f, tempconv.FToC(f), c, tempconv.CToF(c)) }}
// popcount 定義了一個PopCount函式,用於返回一個數字中含二進位制1bit的個數。
package mainimport ( "fmt")var pc [256]bytefunc init() { for i := range pc { pc[i] = pc[i/2] + byte(i&1) } fmt.Println(pc, 6&1)}// pc[i] is the population count of i.可代替初始化函式/*var pc [256]byte func() pc [256]byte { for i := range pc { pc[i] = pc[i/2] + byte(i&1) }}*/// PopCount returns the population count (number of set bits) of x.func PopCount(x int64) int { return int(pc[byte(x>>(0*8))] + pc[byte(x>>(1*8))] + pc[byte(x>>(2*8))] + pc[byte(x>>(3*8))] + pc[byte(x>>(4*8))] + pc[byte(x>>(5*8))] + pc[byte(x>>(6*8))] + pc[byte(x>>(7*8))])}func main() { fmt.Println(PopCount(7))}
最新評論