Go:条件语句、循环语句

一、条件语句

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()
}

 

posted @ 2019-05-12 01:16  就俗人一个  阅读(158)  评论(0编辑  收藏  举报