안녕하세요. 개발자 모도리입니다.
The Go Programming Language 라는 책으로 Go를 공부하고 있으며, 해당 책의 내용을 요약 정리해서 올리려고 합니다. 저는 번역본을 구매해서 공부하고 있습니다.
예제코드 라고 나오는 것들은 https://github.com/modolee/tgpl.git 에서 다운 받으실 수 있습니다.
지난 게시물
- [Go] Mac에서 Atom으로 Go 개발 환경 구축하기
- [The Go Programming Language] 1장 튜토리얼 - 1.1 Hello, World
- [The Go Programming Language] 2장 프로그램 구조 - 2.1 이름
- [The Go Programming Language] 2장 프로그램 구조 - 2.2 선언
- [The Go Programming Language] 2장 프로그램 구조 - 2.3 변수
2장 프로그램 구조
2.4 할당
기본 할당
- 변수 내의 값은 할당문에 의해 갱신되며, 할당문의 제일 단순한 형태는
=
기호의 왼쪽에 변수가 있고 오른쪽에 표현식이 있는 것입니다.
x = 1 // 명명된 변수
*p = true // 간접 변수
person.name = "bob" // 구조체 필드
count[x] = count[x] * scale // 배열이나 슬라이스 또는 맵 원소
2.4.1 튜플 할당
- 튜플 할당 : 여러 변수를 한 번에 할당할 수 있음
- 오른쪽의 모든 표현식은 변수가 갱신되기 전에 평가돼 특정 변수가 공교롭게 할당의 양쪽에 모두 나오는 경우에 유용합니다.
- 두 변수 값을 서로 바꿀 때
x, y = y, x
a[i], a[j] = a[j], a[i]
- 두 정수의 최대 공약수(GCD)
func gcd(x, y int) int {
for y != 0 {
x, y = y, x%y
}
return x
}
- n번째 피보나치 수를 반복적으로 계산할 때
func fib(n int) int {
x, y := 0, 1
for i := 0; i < n; i++ {
x, y = y, x+y
}
return x
}
- 복수의 결과를 반환하는 함수, 표현식
f, err = os.Open("foo.txt") // 함수 호출이 두 값을 반환합니다.
v, ok = m[key] // 맵 조회
v, ok = x.(T) // 타입 지정
v, ok = <-ch // 채널 수신
// 불필요한 값은 빈 식별자에 할당할 수 있습니다.
_, err = io.Copy(dst, src) // 바이트 카운트 버림
_, ok = x.(T) // 타입만 확인하고 결과 버림
2.4.2 할당성
- 묵시적인 할당
- return문은 return문의 피연산자에 대응하는 반환 변수들을 묵시적으로 할당합니다.
- 슬라이스와 같은 복합 타입에 대한 리터럴 표현식은 묵시적으로 각 요소들을 할당합니다.
medals := []strings{"gold", "silver", "bronze"}
// 위의 문장과 동일합니다.
var medals [3]string
medals[0] = "gold"
medals[1] = "silver"
medals[2] = "bronze"
- 맵과 채널의 원소는 일반적인 변수는 아니지만, 이와 유사한 묵시적 할당 대상입니다.