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
}