首页 > 技术分享 > Golang
收藏

Golang的for循环使用细节,while和do..while的实现

01/20 15:57
大潇博客 原创文章,转载请标明出处

for循环基本用法:

for i := 0; i < 10; i++ {

fmt.Println(i)

}

在上面的for循环中,变量 i 仅在for循环内部有效,跳出for循环后,变量i未定义。


第二种写法:

r := 10

for ; r < 20; r++ {

fmt.Println(r)

}

fmt.Println(r)

上面的for循环,循环变量 r 在外部定义,跳出for循环后,变量r的值为for循环中最后一字自增的值。

上面的for循环,还可以做以下简写:

i := 10  //循环变量初始化

for ; i < 20 ; {  //循环条件

fmt.Println(i)

i++  //循环变量迭代

}

fmt.Println(i)

省略分号,继续简写:

var m = 10

for m < 20 {  //等价于 ; m < 20 ;

fmt.Println(m)

m++

}

fmt.Println(m)


第三种写法:

n := 10

for ;; {

if n == 20 {

break;

}

fmt.Println(n)

n++

}

fmt.Println(n)

这种 ; ; 的写法省去了循环条件,是一个无限循环,通常需要配合break使用。

甚至可以省略所有:

x := 10

for {  //等价于 for ;;

if x == 20 {

break

}

fmt.Println(x)

x++

}

fmt.Println(x)


遍历英文字符串:

Golang可以通过for循环遍历字符串,使用方式:

//字符串遍历方式

var str string = "hello"

for i := 0; i < len(str); i++ {

//通过下标取值,会返回该字符对应的ASCII码值

tmp := str[i]

//将ASCII码转成字符串

//string := fmt.Sprintf("%c", tmp) //转换方式一

string := string(tmp) //转换方式二

fmt.Println(tmp, "=>", string)

}


for-range在Golang中用来遍历数组,也可以遍历字符串:

//通过for-range遍历

//index是下标

//rune是字符对应的ASCII码

var str string = "hello world"

for index, rune := range str {

//获取ASCII码对应的字符串

tmp := string(rune)

fmt.Println(index, rune, tmp)

}


遍历中文字符串:

若字符串中包含中文,使用默认的遍历字符串方式会出现乱码,Golang使用UTF8编码,默认按照字节对字符串进行遍历,每个英文字符占用1个字节,每个汉字占3个字节。

遍历中文汉字时,可使用切片的方式:

//遍历包含中文的字符串

var str string = "hello,world!我在这里。"

//解决方法,将str2转成[]rune切片

slice := []rune(str)

for i := 0; i < len(slice); i++ {

tmp := slice[i]

fmt.Println(string(tmp))

}


for-range按照字符方式遍历,因此如果字符串中有中文,也可以正常输出:

var str string = "hello,world!我在这里。"

for index, rune := range str {

//获取ASCII码对应的字符串

fmt.Println(index, string(rune))

}


while和do..while的实现:

Go语言没有while和do..while语法,可以通过for循环来实现while和do..while的效果。

具体方式和在上面的for循环第三种写法中已经出现过,实现方式就是:在一个无限循环的for循环中,执行某些操作,当循环条件满足时,通过break跳出for循环。

语法如下:

循环变量初始化

for {

if 循环条件表达式 {

break //跳出循环

}

循环内的相关操作

循环变量迭代

}


do..while的实现:

循环变量初始化

for {

循环内的相关操作

循环变量迭代

if 循环条件表达式 {

break //跳出循环

}

}

由上面的代码可看出:

1、在Go语言中,while和do..while都可以通过无限for循环实现,当循环条件成立后,通过break跳出循环;

2、通过for循环模拟实现while和do..while的区别是:while先判断再执行,可能不执行内部语句就会跳出,而do..while先执行再判断,因此至少执行一次。


打赏

阅读排行

大家都在搜

博客维护不易,感谢你的肯定
扫码打赏,建议金额1-10元
  • 15601023311