04 Programa de control de flujo


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

  1. Después de case / switch, puede ser una variable, expresión o función con un valor de retorno.
  2. 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.
  3. Si es un valor constante después del caso, no se puede repetir.
  4. el valor predeterminado no es obligatorio
  5. No puede haber expresión después del cambio, similar al uso de if else
  6. Después de que el conmutador puede simplemente declarar una variable, no se recomienda un punto y coma
  7. switch penetration-fallthrough: si se agrega fallthrough después del bloque de instrucción de caso, el siguiente caso continuará ejecutándose
  8. 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

  1. Puede usar la etiqueta para especificar qué nivel del bucle for debe detenerse
  2. 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

  1. goto puede hacer que el programa vaya incondicionalmente a la ubicación especificada para su ejecución
  2. Por lo general, se usa junto con declaraciones condicionales para realizar funciones como transición condicional y fuera de bucle
  3. 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 //结束内存循环
			}
			   
		}
	}
	

Supongo que te gusta

Origin blog.csdn.net/zhangxm_qz/article/details/114385412
Recomendado
Clasificación