/* Copyright (C) 2011-2023 Patrick H. E. Foubet - E2L Ivry Ecole du Logiciel Libre : https://e2li.org/ This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see *******************************************************************/ package main import ( "fmt" ) func main() { adder := func(a int, b int) int { return a + b } fmt.Println(adder(5, 6)) counter1 := counter() counter2 := counter() fmt.Println(counter1()) fmt.Println(counter2()) deferredPrint() } func counter() func() int { i := 0 return func() int { i++ return i } } func deferredPrint() { defer fmt.Println("defer 1") fmt.Println("regular thing") defer fmt.Println("defer 2") }