Go学习笔记switch和if以及for用法

if和switch的初始化结构:

if例子

if val := 10; val > max {
	// do something
}

switch例子

switch result := calculate(); {
	case result < 0:
		...
	case result > 0:
		...
	default:
		// 0
}
switch的无指定变量结构:

列子:

switch {
	case i < 0:
		f1()
	case i == 0:
		f2()
	case i > 0:
		f3()
}
练习 5.2: season.go:

写一个 Season() 函数,要求接受一个代表月份的数字,然后返回所代表月份所在季节的名称(不用考虑月份的日期)。

package main
import (
    "fmt"
)
func Season(month int)(season string,ok bool){
    var spring string="spring"
    var summer string="summer"
    var autumn string="autumn"
    var winter string="winter"
    switch month{
        case 1,2,3:
            return spring,true
        case 4,5,6:
            return summer,true
        case 7,8,9:
            return autumn,true
        case 10,11,12:
            return winter,true
        default:
            return "",false
    }
    
}
func main() {
    season,ok:=Season(15)
    if(ok){
        fmt.Print(season)
    }else{
        fmt.Print("no")
    }
}

else必须写在if的第二个括号的同一行…

练习 5.4 for_loop.go

使用 for 结构创建一个简单的循环。要求循环 15 次然后使用 fmt 包来打印计数器的值。
使用 goto 语句重写循环,要求不能使用 for 关键字。

package main
import (
    "fmt"
)

func main() {
    i:=0
    a: 
    i++
    if i<=15{
        fmt.Print(i,"\n")
        goto a
    }else{
        fmt.Print("结束")
    }
}
练习 5.5 for_character.go

创建一个程序,要求能够打印类似下面的结果(尾行达 25 个字符为止):
使用 2 层嵌套 for 循环。
仅用 1 层 for 循环以及字符串连接。

G
GG
GGG
GGGG
GGGGG
GGGGGG
package main
import (
    "fmt";
    //"strings"
)

func main() {
    for i:=0;i<25;i++{
        for j:=0;j<i;j++{
            fmt.Print("G")
        }
        fmt.Print("\n")
    }
    s:="G"
    for i:=0;i<25;i++{
        fmt.Print(s+"\n")
        s=s+"G"
    }
}
练习 5.6 bitwise_complement.go

使用按位补码从 0 到 10,使用位表达式 %b 来格式化输出。

func main() {

    for i:=0;i<=10;i++{
        fmt.Printf("%b\n",i)

    }
}
练习 5.7 Fizz-Buzz 问题:fizzbuzz.go

写一个从 1 打印到 100 的程序,但是每当遇到 3 的倍数时,不打印相应的数字,但打印一次 “Fizz”。遇到 5 的倍数时,打印 Buzz 而不是相应的数字。对于同时为 3 和 5 的倍数的数,打印 FizzBuzz(提示:使用 switch 语句)。

package main
import (
    "fmt";
    //"strings"
)

func main() {
    
        for i:=1;i<=100;i++{
            switch{
                case i%5==0&&i%3==0 :
                    fmt.Printf("FuzzBuzz\n")
                case i%3==0 :
                    fmt.Printf("Fuzz\n")
                case i%5==0 :
                    fmt.Printf("Buzz\n")

                default:
                     fmt.Printf("%d\n",i)

            }
    
        }
}
练习 5.8 rectangle_stars.go

使用 * 符号打印宽为 20,高为 10 的矩形。

package main
import (
    "fmt";
    //"strings"
)

func main() {
    
        for i:=1;i<=10;i++{
            for j:=1;j<20;j++{
                fmt.Printf("*")
            }
            fmt.Printf("\n")
        }
}
for循环的while写法

for 结构的第二种形式是没有头部的条件判断迭代(类似其它语言中的 while 循环),基本形式为:for 条件语句 {}

var i int = 5

for i >= 0 {
i = i - 1
fmt.Printf(“The variable i is now: %d\n”, i)
}

for-range 结构

它可以迭代任何一个集合,可以获得每次迭代所对应的索引。一般形式为:for ix, val := range coll { }。

要注意的是,val 始终为集合中对应索引的值拷贝,因此它一般只具有只读性质,对它所做的任何修改都不会影响到集合中原有的值(译者注:如果 val 为指针,则会产生指针的拷贝,依旧可以修改集合中的原值)。一个字符串是 Unicode 编码的字符(或称之为 rune)集合,因此您也可以用它迭代字符串:

for pos, char := range str {
...
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值