S SmartDocs
Serie: Go go 70 líneas · Actualizado 2026-04-18

main.go

Go/part1-language/examples/05_control/main.go

// Demonstrates control flow: if, for (all forms), switch, defer, recover.
package main

import "fmt"

func classify(x int) string {
	switch {
	case x < 0:
		return "negative"
	case x == 0:
		return "zero"
	default:
		return "positive"
	}
}

func deferOrder() {
	defer fmt.Println("A (runs last)")
	defer fmt.Println("B")
	defer fmt.Println("C (runs first)")
	fmt.Println("body")
}

func safeDivide(a, b int) (result int, err error) {
	defer func() {
		if r := recover(); r != nil {
			err = fmt.Errorf("recovered from: %v", r)
		}
	}()
	return a / b, nil
}

func main() {
	for i := 0; i < 3; i++ {
		fmt.Println("classic", i)
	}

	n := 0
	for n < 3 {
		fmt.Println("while-style", n)
		n++
	}

	nums := []int{10, 20, 30}
	for i, v := range nums {
		fmt.Println("range", i, v)
	}

outer:
	for i := 0; i < 5; i++ {
		for j := 0; j < 5; j++ {
			if i*j > 6 {
				fmt.Println("breaking out at", i, j)
				break outer
			}
		}
	}

	for _, x := range []int{-3, 0, 7} {
		fmt.Println(x, classify(x))
	}

	deferOrder()

	if v, err := safeDivide(10, 0); err != nil {
		fmt.Println("got err:", err)
	} else {
		fmt.Println("got value:", v)
	}
}

Artículos relacionados