这里写目录标题
for循环的死循环
代码如下:
package main
import (
"fmt"
)
func main() {
var a=10
for ; ; {//与for{
//}效果一样
fmt.Println(a)
a++
if a==12{
break
}
}
}
字符串的两种遍历方式
第一种是用传统的for-i循环遍历,
第二种是利用go种自带的方法。
attention:
1:注意在utf-8中一个中文占三个字节。
2:对于传统的遍历,在遇到中文是会导致输出错误,我们可以重新将它转换成为切片,在定义一个字符串来接收转换出来的数据。
3:go中的for-range遍历可以直接查找出中文。使用字符遍历。
代码如下:
package main
import "fmt"
func main (){
st:="fzuishuai是的"
st2:=[]rune(st)//将st转换成切片
for i:=0;i<len(st2);i++{//普通遍历
fmt.Printf("%c",st2[i])
}
fmt.Println("\n")
str:="fis帅哥"
for index,val:=range str{//利用go中自带的方法来遍历,其中index为字符串数组下标,str被赋值给val
fmt.Printf("index=%d,val=%c \n",index,val)
}
}
运行结果截图:
与Java和C不一样的地方
go中没有while和do-while循环,都是用for循环来实现相关的功能。
如何设置随机数
1:首先我们将会用到rand函数,使用这个函数需要引入“math/rand”包 ,使用方法:
定义的变量:=rand.Intn(随机数上界);
你所定义的变量将会随机生成,注意随机数为0到上界减一,不包括上界。
==但是这样定义出来的随机数是伪随机数,每次运行的结果都是一样的,这个时候就需要设置时间种子:time.Now.Unix()->返回一个从1970.1.1.0h.0min到现在的秒数。
使用方法见代码:
package main
import (
"fmt"
"math/rand"
"time"
)
func main(){
rand.Seed(time.Now().Unix())
for{
n:=rand.Intn(100)+1;//从1-100随机数
fmt.Println(n)
if(n==1){
break
}
}
}
运行结果截图:
使用label标签来指定break跳出位置
文字不好说明,看代码吧:
第一种label:
package main
import "fmt"
func main(){
for i:=0;i<10;i++{
label1:
for j:=0;j<10;j++{
fmt.Print(j)
if j==3{
break label1
}
}
fmt.Print("\n")
}
}
运行结果截图:
可以看到一共运行了10次,每次j=3时就跳出j的循环,执行i的循环。
第二种label
package main
import "fmt"
func main(){
label2:
for i:=0;i<10;i++{
for j:=0;j<10;j++{
fmt.Print(j)
if j==3{
break label2
}
}
fmt.Print("\n")
}
}
运行结果截图:
可以看到当运行了一次 j 循环后直接跳出了 i 循环。
continue,goto的使用
1:continue是用来跳过这次循环开始下一次循环的,和c++的一样,不在赘述。
2:go中是支持goto语句的使用的,配合label标签使用,但是一般不建议使用,因为代码将会更难理解。
示例代码如图:
package main
import "fmt"
func main(){
fmt.Println("fyf")
goto label1
fmt.Println("f")
fmt.Println("y")
label1:
fmt.Println("i")
fmt.Println("k")
fmt.Println("m")
}
运行结果截图: