1. 程式人生 > >Go:條件語句、循環語句

Go:條件語句、循環語句

nil res light nbsp can pri toa txt func

一、條件語句

package main

import (
	"fmt"
	"io/ioutil"
)

// if的條件不需要括號

func xx(i int) int {
	if i == 1 {
		return 1
	} else if i == 2{
		return 2
	} else {
		return 0
	}
}

func eval(a, b int, operator string) int {
	var result int
	switch operator {
	case "+":
		result = a + b
	case "-":
		result = a - b
	case "*":
		result = a * b
	case "/":
		result = a / b
	default:
		// panic相當於報錯
		panic("unsupported operator:" + operator)
	}
	return result
}

func getGrade(score int) string {
	grade := ""
	// switch後面可以沒有表達式,在case中實現即可
	switch {
	case score == 100:
		grade = "A+"
	case score >= 90 && score< 100:
		grade = "A"
	case score >= 80 && score< 90:
		grade = "B"
	}
	return grade
}

func main() {
	fmt.Println(xx(10)) // 0

	const filename = "test.txt"
	if contents, err := ioutil.ReadFile(filename); err != nil {
		fmt.Println(err)
	} else {
		fmt.Printf("%s\n", contents)
		/*
		千山鳥飛絕,萬徑人蹤滅。
		孤舟蓑笠翁,獨釣寒江雪。
		*/
	}

	fmt.Println(eval(10, 20, "+")) // 30

	fmt.Println(getGrade(95)) // A
}

二、循環語句

package main

import (
	"bufio"
	"fmt"
	"os"
	"strconv"
)

// for的條件不需要括號
// for的條件可以省略初始條件、結束條件、遞增表達式

func convertToBinary(i int) string {
	result := ""
	for ; i > 0; i /= 2 {
		tmp := i % 2
		result = result + strconv.Itoa(tmp)
	}
	return result
}

func printFileContent(filename string) {
	file, err := os.Open(filename)
	if err != nil {
		panic(err)
	}
	scanner := bufio.NewScanner(file)
	// 只有結束條件
	for scanner.Scan() {
		fmt.Println(scanner.Text())
	}
}

func foreverCircle() {
	// 死循環
	for {
		fmt.Println("1")
	}
}

func printStr1(s string) {
	for index, value := range s {
		fmt.Printf("index:%d value:%c\n", index, value)
		/*
		index:0 value:H
		index:1 value:e
		index:2 value:l
		index:3 value:l
		index:4 value:o
		index:5 value:
		index:6 value:W
		index:7 value:o
		index:8 value:r
		index:9 value:l
		index:10 value:d
		*/
	}
}

func printStr2(s string) {
	for index, value := range s {
		if index < 5 {
			fmt.Printf("index:%d value:%c\n", index, value)
			/*
			index:0 value:H
			index:1 value:e
			index:2 value:l
			index:3 value:l
			index:4 value:o
			*/
			continue
		} else if index == 5 {
			break
		}
	}
}

func main() {
	fmt.Println("1")
	fmt.Println(
		convertToBinary(1),  // 1
		convertToBinary(2),  // 01
		convertToBinary(5),  // 101
		convertToBinary(10), // 0101
	)

	printFileContent("test.txt")
	/*
	千山鳥飛絕,萬徑人蹤滅。
	孤舟蓑笠翁,獨釣寒江雪。
	*/

	//foreverCircle()

	printStr1("Hello World")

	printStr2("Hello World")
}

三、goto語句(不推薦使用)

package main

import "fmt"

func func1() {
	LABEL:
		for i := 0; i <= 5; i++ {
			for j := 0; j <= 5; j++ {
				if j == 4 {
					continue LABEL // LABEL相當於標誌,程序跳到此處執行
				}
				fmt.Printf("i is: %d, and j is: %d\n", i, j)
			}
		}
}

func func2() { // 相當於for循環
	i := 0
	LABEL:
		fmt.Println(i)
		i++
		if i == 5 {
			return
		}
		goto LABEL
}

func main() {
	func1()
	func2()
}

Go:條件語句、循環語句