04 Controle de fluxo do programa


O controle de fluxo do programa determina como o programa é executado. As instruções de controle do programa geralmente incluem: sequência, ramificação e loop

Controle de sequência

O programa é executado de cima para baixo por padrão e não há salto no meio.
Em Golang, referências legais futuras são usadas, e as variáveis ​​devem ser definidas antes do uso (algumas linguagens suportam julgamento antes da definição, e o processo de execução do programa será automaticamente otimizado)

Controle de filial

se controle de filial

se for compatível com a sintaxe de controle de ramificação única, ramificação dupla e ramificação múltipla é a seguinte

Gramática básica

if 条件表达式1 {
    
    
	执行代码块1
}else if 条件表达式2{
    
    
	执行代码块2
}
....
else{
    
    
    执行代码块3
}

Quando a expressão condicional 1 for verdadeira, o bloco de código 1 será executado, caso contrário, a expressão condicional 2 será julgada, se for verdadeira, o bloco de código 2 será executado, se todas as expressões anteriores forem falsas, o bloco de código 3 será executado

Programa de amostra

func test6(){
    
    
	var age int
	fmt.Println("请输入年龄:")
	fmt.Scanln(&age)
	if(age>18){
    
    
		fmt.Println("你是成年人")
	}else if(age>0){
    
    
		fmt.Println("你是未成年人")
	}else{
    
    
		fmt.Println("年龄不合法")
	}
}

mudar o controle da filial

Gramática básica

switch 表达式{
    
    
	case 表达式1,表达式2...:
		代码块1
	case 表达式3,表达式4...:
		代码块2
	...
	default:
	     代码块n	
}     

Não há necessidade de adicionar break no bloco de instrução switch case em go, e pode haver várias expressões após o case separadas por vírgulas

Código de amostra

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的类型是 未知类型")
   } 
}

ponto importante

  1. Depois de case / switch, pode ser uma variável, expressão ou função com um valor de retorno.
  2. O tipo de dados da expressão após o caso deve ser o mesmo que o tipo da expressão após a troca
  3. Se for um valor constante após o caso, não pode ser repetido
  4. padrão não é necessário
  5. Não pode haver expressão após switch, semelhante ao uso de if else
  6. Depois que o switch pode simplesmente declarar uma variável, um ponto - e - vírgula não é recomendado
  7. switch penetration-fallthrough: Se o fallthrough for adicionado após o bloco de instrução do caso, o próximo caso continuará a ser executado
  8. Switch de tipo: A instrução switch pode ser usada em switch de tipo para determinar o tipo de variável executada por uma variável de interface

Resumo
Se não houver muitos valores específicos a serem julgados e for adequado para números inteiros, números de ponto flutuante, caracteres e strings, é recomendável usar switch. Breve introdução é eficiente.
Outras situações: julgamento de intervalo, o o resultado é o julgamento do tipo bool, use se, e se a faixa de uso for mais ampla

Controle de loop

para controle de loop

Gramática básica

for 循环变量初始化;循环条件;循环变量迭代{
    
    
	循环操作(语句)
}
for ; ; {
    
     //无限循环 通常配合break语句使用
	//操作语句
}
for {
    
    //无限循环 通常配合break语句使用
	//操作语句
}
for index,val := range str{
    
    
	//操作语句
}

Exemplo 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)
	}
}

enquanto eu faço enquanto

Linguagem Go não tem tempo e fazer enquanto sintaxe, você pode usar para conseguir o mesmo efeito.
Exemplo 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++
	}
}

Quebra de instrução de controle de salto continue goto return

Break
break é usado para suspender a execução de um bloco de instrução e é usado para interromper o loop for atual ou instrução switch

  1. Você pode usar o rótulo para especificar qual nível do loop for parar
  2. Salte do loop for mais próximo por padrão

continue é
usado para encerrar este loop e iniciar diretamente o próximo loop. Quando
vários loops estão aninhados, o rótulo pode ser usado para especificar qual nível de loop pular

vamos para

  1. goto pode fazer com que o programa vá incondicionalmente para o local especificado para execução
  2. Geralmente é usado em conjunto com declarações condicionais para realizar funções como transição condicional e fora do loop
  3. Geralmente não é recomendado usar goto, é fácil causar confusão no fluxo do programa

return é
usado para saltar para fora do método ou função

Código de amostra

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 //结束内存循环
			}
			   
		}
	}
	

Acho que você gosta

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