var printName = func (name string) {
	 fmt.Println(name)
}
func sum (nums ...int) int {
		sum := 0
		for _, v := range nums {
				sum += v
		}
		return sum
}

인수는 순회할 수 있다.

이때 인수의 타입은 슬라이스로 처리된다. 위에서는 []int 타입.

func anything (thing ...interface{}) {
		for _, obj := range thing {
				fmt.Println("값:", obj, "타입:", obj.(type))
		}
}

함수가 종료되기 직전에 실행하여야 하는 코드가 있다면, 예를 들어 파일이나 소켓 핸들. 즉 OS 내부 자원을 사용하는 경우. 쓰고 나서 반드시 OS에 반환해야 한다. 이럴 경우에 defer 키워드를 사용할 수 있다.

func main () {
		f, err := os.Create("example.txt")
		if err != nil {
				fmt.Println("Failed to create a file")
				return
		}
		
		defer fmt.Println("파일을 닫았습니다") .....3
		defer f.Close() //지연 수행될 코드(main 종료 직전에 실행됨) .....2
		
		fmt.Fprintln(f, "hello world") //위의 defer보다 먼저 수행됨.....1
}

defer 키워드가 붙은 명령들끼리는, 역순으로 실행된다.

아래의 add 함수가 있다고 한다면

func add (a, b int) int {
		return a + b
}