Go学习笔记
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 {
...
}