Golang
-
[Go] The Go Programming Language #5-8: 연기된 함수 호출Golang 2021. 12. 1. 04:30
이 시리즈는 "The Go Programming Language" 책을 바탕으로 작성되었습니다. 5.8 연기된 함수 호출 defer 란? defer 키워드는 함수가 종료되기 전까지 특정 구문의 실행을 지연시켰다가, 함수가 종료되기 직전에 지연시켰던 구문을 수행하는 역할임. func main() { f1() } func f1() { fmt.Println("f1 - start") defer f2() fmt.Println("f1 - end") } func f2() { fmt.Printf("f2 - deferred") } /* 출력 결과 : f1 - start f1 - end f2 - deferred */ 함수 하나에 defer 키워드를 여러 개 사용하면, defer로 지정한 각 구문은 스택(stack)에 쌓였..
-
[Go] The Go Programming Language #5-7: 가변 인자 함수Golang 2021. 12. 1. 04:30
이 시리즈는 "The Go Programming Language" 책을 바탕으로 작성되었습니다. 5.7 가변 인자 함수 함수를 다양한 개수의 인자로 호출할 수 있다. 최종 파라미터 타입 앞에 생략 기호 '...'을 붙여서, 함수에서 해당 타입의 인자를 제한 없이 받을 수 있도록 선언한 함수를 말함. 가변 인자 함수의 사용법 0개 이상의 int 인자를 받아서 그 합을 반환하는 예제 **func sum(vals ...int) int {** total := 0 for _, val := range vals { total += val } return total } fmt.Println(sum()) // "0" fmt.Println(sum(3)) // "3" **fmt.Println(sum(1, 2, 3, 4))*..
-
[Go] The Go Programming Language #5-6: 익명 함수Golang 2021. 12. 1. 04:30
이 시리즈는 "The Go Programming Language" 책을 바탕으로 작성되었습니다. 5.6 익명 함수 말 그대로 '이름 없는 함수'를 뜻한다. 익명 함수의 사용법 함수의 이름만 없을뿐, 선언 형태는 동일함. 함수 선언의 마지막 중괄호 ( } ) 뒤에 괄호를 사용하여 바로 호출할 수 있음. 이때, 괄호 안에는 매개변수가 들어감. // 여러 활용 방법 func main() { func() { fmt.Println("hello") }() func(a int, b int) { result := a + b fmt.Println(result) }(1, 3) result := func(a string, b string) string { return a + b }("hello", " world!") fmt..
-
[Go] The Go Programming Language #5-5: 함수 값Golang 2021. 12. 1. 04:30
이 시리즈는 "The Go Programming Language" 책을 바탕으로 작성되었습니다. 5.5 함수 값 Go의 함수는 일급 함수 (퍼스트 클래스 값) 임. 즉, 함수 값이 다른 값과 마찬가지로 타입이 있고 이 값을 변수에 할당하거나 함수로 전달하거나 함수에서 반환할 수 있다는 의미임. func square(n int) int { return n * n } func negative(n int) int { return -n } func product(m, n int) int { return m * n } f := square fmt.Println(f(3)) // "9" f = negative fmt.Println(f(3)) // "-3" fmt.Printf("%T\n", f) // "func(int..
-
[Go] The Go Programming Language #5-4: 오류Golang 2021. 12. 1. 04:30
이 시리즈는 "The Go Programming Language" 책을 바탕으로 작성되었습니다. 5.4 오류 오류는 언제나 예기치 못한 상황에서 마주칠 가능성이 높다. Go의 오류 처리 방식 Go는 실패를 예외 처리가 아닌 일반 값으로 보고한다는 점에서 다른 언어와 구별됨. 대부분의 언어는 if문 또는 try-catch문을 사용하여 에러를 잡아내고 처리함. Go에서는 error를 값의 형태로 거의 함께 반환함. (try-catch는 없음) ⇒ 에러가 일어나지 않으면 nil을, 일어난다면 error를 반환함. 실패가 예상되는 함수는 보통 마지막에 부가적인 결과를 반환함. 실패 원인이 한 가지일 때 : 불리언 값 반환 ⇒ ok value, ok := cache.Lookup(key) if !ok { // ....
-
[Go] The Go Programming Language #5-3: 다중 값 반환Golang 2021. 12. 1. 04:30
이 시리즈는 "The Go Programming Language" 책을 바탕으로 작성되었습니다. 5.3 다중 값 반환 Go에서의 함수는 결과를 한 개 이상 반환할 수 있다. 여러 개의 리턴 값 ⇒ 1장 예제 이용 : fetch 지정된 URL에서 내용을 가져오고 이를 원본 그대로 출력하는 프로그램을 작성해봄. package main import ( "fmt" "io/ioutil" "net/http" "os" ) func main() { for _, url := range os.Args[1:] { **b, err := getUrl(url)** if err != nil { fmt.Fprintf(os.Stderr, "geturl: %v", err) continue } fmt.Printf("%s", b) } } ..
-
[Go] The Go Programming Language #5-1: 함수 선언Golang 2021. 12. 1. 04:30
이 시리즈는 "The Go Programming Language" 책을 바탕으로 작성되었습니다. 5.1 함수 선언 func 이름(파라미터 목록) (결과 목록) { 본문 } 파라미터 목록 : 함수 파라미터의 이름과 타입 지정 ⇒ 파라미터는 함수 내에서만 사용되는 "지역변수" 결과 목록 : 함수가 반환하는 값의 타입 지정 ⇒ 함수의 반환하지 않을 경우 괄호 생략 가능 → 아무 것도 반환하지 않음. +) Go 언어는 함수 정의를 시작한 줄에서 { (여는 중괄호)가 시작됨. 여는 중괄호를 다음 줄에 작성하면 컴파일 에러가 발생함. 예제로 알아보기 : hypot func hypot(x, y float64) float64 { return math.Sqrt(x*x + y*y) // math.Sqrt : 제곱근 구하는..
-
[Go] The Go Programming Language #4-2: 슬라이스Golang 2021. 12. 1. 04:29
이 시리즈는 "The Go Programming Language" 책을 바탕으로 작성되었습니다. 4.2 슬라이스 슬라이스는 모든 원소가 같은 타입인 가변 길이 시퀀스를 나타낸다. 슬라이스는 '슬라이스의 내부 배열'이라고 알려진 배열의 원소들 일부 (또는 전부) 에 접근할 수 있는 경량 자료 구조임. 슬라이스 타입은 원소가 T 타입일 때 []T 로 씀. 이는 크기가 없는 배열 타입처럼 보임. 슬라이스에는 세 가지 구성 요소로 포인터, 길이, 용량이 있음. 포인터 : 슬라이스로 접근할 수 있는 배열의 첫 번째 원소를 가리킴. (반드시 배열의 첫 번째 원소일 필요는 없음) 길이 : 슬라이스 원소의 개수로, 길이는 용량을 초과할 수 없음. 용량 : 보통 슬라이스 내부 배열의 시작과 끝 사이에 있는 원소의 개수임..