Directorio de artículos
El control de flujo del programa determina cómo se ejecuta el programa. Las declaraciones de control del programa generalmente incluyen: secuencia, bifurcación y bucle
Control de secuencia
El programa se ejecuta de arriba a abajo de forma predeterminada y no hay ningún salto en el medio.
En Golang, se utilizan referencias legales hacia adelante y las variables deben definirse antes de su uso (algunos lenguajes admiten la prueba antes de la definición, y el proceso de ejecución del programa se optimizará automáticamente)
Control de sucursales
si control de rama
si admite la sintaxis de control de rama única, rama doble y rama múltiple es la siguiente
Gramática básica
if 条件表达式1 {
执行代码块1
}else if 条件表达式2{
执行代码块2
}
....
else{
执行代码块3
}
Cuando la expresión condicional 1 es verdadera, se ejecutará el bloque de código 1; de lo contrario, se juzgará la expresión condicional 2, si es verdadera, se ejecutará el bloque de código 2, si las expresiones anteriores son todas falsas, se ejecutará el bloque de código 3
Programa de muestra
func test6(){
var age int
fmt.Println("请输入年龄:")
fmt.Scanln(&age)
if(age>18){
fmt.Println("你是成年人")
}else if(age>0){
fmt.Println("你是未成年人")
}else{
fmt.Println("年龄不合法")
}
}
interruptor de control de rama
Gramática básica
switch 表达式{
case 表达式1,表达式2...:
代码块1
case 表达式3,表达式4...:
代码块2
...
default:
代码块n
}
No es necesario agregar interrupciones en el bloque de instrucciones de cambio de caso en go, y puede haber varias expresiones después del caso separadas por comas
Código de muestra
func test7(){
var age int
fmt.Println("请输入年龄:")
fmt.Scanln(&age)
switch age {
case 1,2,3,4,5,6:
fmt.Println("你是儿童")
case 7,8,9,10,11,12,13,14:
fmt.Println("你是少年")
default:
fmt.Println("你长大了")
}
switch {
case 0<age && age<=7:
fmt.Println("你是儿童")
case 7<age && age<=14:
fmt.Println("你是少年")
default:
fmt.Println("你长大了")
}
switch nage := age; {
case 0<nage && nage<=7:
fmt.Println("你是儿童")
//fallthrough switch 穿透
case 7<nage && nage<=14:
fmt.Println("你是少年")
default:
fmt.Println("你长大了")
}
var x interface{
}
var y = 10.0
x = y
switch i :=x.(type){
case nil:
fmt.Printf("x的类型是 : %T",i)
case int:
fmt.Printf("x的类型是 : int")
case float64:
fmt.Printf("x的类型是 : float64")
default:
fmt.Printf("x的类型是 未知类型")
}
}
punto importante
- Después de case / switch, puede ser una variable, expresión o función con un valor de retorno.
- El tipo de datos de la expresión después del caso debe ser el mismo que el tipo de la expresión después del cambio.
- Si es un valor constante después del caso, no se puede repetir.
- el valor predeterminado no es obligatorio
- No puede haber expresión después del cambio, similar al uso de if else
- Después de que el conmutador puede simplemente declarar una variable, no se recomienda un punto y coma
- switch penetration-fallthrough: si se agrega fallthrough después del bloque de instrucción de caso, el siguiente caso continuará ejecutándose
- Tipo de cambio: la declaración de cambio se puede utilizar en el tipo de cambio para determinar el tipo de variable ejecutada por una variable de interfaz
Resumen
Si no hay muchos valores específicos para juzgar, y es adecuado para números enteros, números de punto flotante, caracteres y cadenas, se recomienda usar el interruptor. Una breve introducción es eficiente.
Otras situaciones: juicio de intervalo, el el resultado es un juicio de tipo bool, use si y si el rango de uso es más amplio
Control de bucle
para control de bucle
Gramática básica
for 循环变量初始化;循环条件;循环变量迭代{
循环操作(语句)
}
for ; ; {
//无限循环 通常配合break语句使用
//操作语句
}
for {
//无限循环 通常配合break语句使用
//操作语句
}
for index,val := range str{
//操作语句
}
Ejemplo de código
func test8(){
for i := 1;i < 10;i++{
fmt.Println("结果:",i)
}
fmt.Println("=====================")
var c int =1;
for {
fmt.Println("结果:",c)
c++
if(c>10){
break
}
}
fmt.Println("=====================")
var str string = "我爱北京天安门"
for i :=0 ; i<len(str); i++ {
fmt.Printf("%c \n",str[i])
}
fmt.Println("=====================")
for index,val := range str {
fmt.Printf("index =%d ,val=%c \n",index,val)
}
}
mientras 和 hacer mientras
Go language no tiene la sintaxis while y do while, puede usar for para lograr el mismo efecto.
Ejemplo de código
func test9(){
// ---------do while 效果实现
var c int =1
for {
fmt.Println("结果:",c)
c++
if(c>10){
break
}
}
// while 效果实现
for {
if(c>10){
break
}
fmt.Println("结果:",c)
c++
}
}
Saltar declaración de control romper continuar ir a volver
Break
break se usa para suspender la ejecución de un bloque de instrucciones y se usa para interrumpir la instrucción de bucle for o switch actual
- Puede usar la etiqueta para especificar qué nivel del bucle for debe detenerse
- Saltar del bucle for más cercano de forma predeterminada
continue se
utiliza para finalizar este ciclo e iniciar directamente el siguiente ciclo. Cuando
se anidan varios ciclos, la etiqueta se puede utilizar para especificar qué nivel de ciclo omitir
ir
- goto puede hacer que el programa vaya incondicionalmente a la ubicación especificada para su ejecución
- Por lo general, se usa junto con declaraciones condicionales para realizar funciones como transición condicional y fuera de bucle
- Generalmente no se recomienda usar goto, es fácil causar confusión en el flujo del programa
return se
usa para saltar fuera del método o función
Código de muestra
func test10(){
outf://增加标签
for i := 0;i<5;i++ {
inf:
for j :=0; j<5; j++ {
fmt.Println("i=",i,",j=",j);
if i == 1 && j == 2{
break inf //结束内存循环 外层循环继续执行 外层继续i =2 的循环
}
if i==3 {
continue outf
}
if i == 5 && j == 2{
// 输出 5 2 后外层循环中止,后续不在有输出
break outf //结束内存循环
}
}
}