基础[1]
- 创建一个基于 for 的简单的循环。使其循环 10 次,并且使用 fmt 包打印出计数器的值。
import "fmt"
//这里使用最简单的for循环
for i := 0; i< 10; i++ {
fmt.Print(i)
}
- 用 goto 改写 1 的循环。保留字 for 不可使用。
import fmt
i := 0
this: //跳转到这里
fmt.Print(i)
i ++
if i < 10 {
goto this
}
- 再次改写这个循环, 使其遍历一个 array, 并将这个 array 打印到屏幕上。
import fmt
var arr = []int {0,1,2,3,4,5}
//使用range来遍历一个数组
for _, item := range arr {
fmt.Print(item)
}
- 编写一个程序,打印从 1 到 100 的数字。当是三个倍数就打印 “Fizz” 代替数字,当是五的倍数就打印 “Buzz”。当数字同时是三和五的倍数时,打印 “FizzBuzz”。
import fmt
for i := 1; i <= 100; i++ {
//没有表达式的switch默认判定的是true/false
switch {
case i%3 ==0:
fmt.Print("Fizz")
case i%5 == 0:
fmt.Print("Buzz")
case i%3 == 0 && i%5 == 0:
fmt.Print("FizzBuzz")
default:
fmt.Print(i)
}
}
- 建立一个 Go 程序打印下面的内容(到 100 个字符):
A
AA
AAA
AAAA
AAAAA
AAAAAA
AAAAAAA
import fmt
//使用了两个for循环
for i := 1; i <=100; i++ {
for j := 1; j < i; j ++ {
fmt.Print("A")
}
fmt.Println()
}
另一个版本:
import "fmt"
func main() {
str := "A"
for i := 0; i < 100; i++ {
//每次打印一个字符后和自己叠加起来
fmt.Printf("%s\n", str)
str = str + str
}
}
-
建立一个程序统计字符串里的字符数量:
asSASA ddd dsjkdsjs dk
同时输出这个字符串的字节数。
import unicode/utf8
str := "asSASA ddd dsjkdsjs dk"
//字符串的字符数量
fmt.Println(len([]byte(str)))
//字节数
fmt.Print(utf8.RuneCount([]byte(str)))
- 扩展上一个问题的程序,替换位置 4 开始的三个字符为 “abc”。
import fmt
str := "asSASA ddd dsjkdsjs dk"
r := []rune(str)
//使用复制函数把abc复制到指定位置
copy(r[4:4+3], []rune("abc"))
fmt.Printf("before: %s\n", str)
fmt.Printf("after: %s\n", string(r))
- 编写一个 Go 程序可以逆转字符串,例如 “foobar” 被打印成 “raboof”。
import fmt
str := "foobar"
//转换成byte类型数组
a := []byte(str)
// 这里的话,i赋值为0,j赋值为len(a) -1 的长度
for i, j := 0, len(a) - 1; i < j; i, j = i + 1, j - 1 {
a[i], a[j] = a[j], a[i]
}
fmt.Print(string(a))
- 编写计算一个类型是 float64 的 slice 的平均值的代码。
import fmt
xe := []int{1, 18, 33, 5, 6, 2, 7, 5, 8, 99}
sum := 0.0
avg := 0.0
switch len(xe) {
case 0:
avg = 0.0
default:
for _, v := range xe {
//累加
sum = sum + float64(v)
}
avg = sum / float64(len(xe))
}
fmt.Print(avg)
书本链接learning go
下一章是函数ヽ( ̄▽ ̄)و