Chapter 07. 함수
7.1 함수 정의
gofunc Add(a int, b int) int { return a + b }
gofunc Add(a int, b int) int { return a + b }
- func: 함수 정의 키워드
- Add: 함수명
- 함수명의 명명 규칙은 변수명과 같다.
- 첫 글자가 대문자인 함수는 패키지 외부로 공개 되는 함수다.
- (a int, b int): 매개변수
- int: 반환 타입
함수를 호출할 때 입력하는 값을 arguments
라고 한다. 호출부에서는 arguments
반면 함수가 외부로부터 입력받는 변수는 parameter
라고 한다. 선언부에서는 parameter
Golang 에서 함수는 값을 여러 개 반환할 수 있다. 반환값이 여럿일 때는 반환 타입들을 소괄호로 묶어서 표현한다.
gopackage main import ( "fmt" ) // NOTE: 여러개의 반환값이 있을 때는 아래처럼 () 로 묶어야한다. func Divide(a, b int) (int, bool) { if b == 0 { return 0, false } return a / b, true } func main() { d, success := Divide(10, 2) fmt.Println(d, success) c, success := Divide(10, 0) fmt.Println(c, success) }
gopackage main import ( "fmt" ) // NOTE: 여러개의 반환값이 있을 때는 아래처럼 () 로 묶어야한다. func Divide(a, b int) (int, bool) { if b == 0 { return 0, false } return a / b, true } func main() { d, success := Divide(10, 2) fmt.Println(d, success) c, success := Divide(10, 0) fmt.Println(c, success) }
또한, 함수 선언부에서 반환 타입을 적을 때 변수명까지 지정해주면, Return 문으로 해당 변수를 명시적 반환을 하지 않음에도 반환이 가능하다.
gopackage main import ( "fmt" ) func Divide(a, b int) (result int, success bool) { if b == 0 { result = 0 success = false return } result = a / b success = true return } ...
gopackage main import ( "fmt" ) func Divide(a, b int) (result int, success bool) { if b == 0 { result = 0 success = false return } result = a / b success = true return } ...
Chapter 08. 상수
상수는 변하지 않는 값을 의미한다. 상수는 초기화 된 값이 변하지 않는다. 정수, 실수, 문자열 등 기본 타입값들만 상수로 선언 될 수 있다.
구조체, 배열 등 기본타입이 아닌 complex
타입에는 상수를 사용할 수 없다.
상수로 사용될 수 있는 타입
- 불리언
- 정수
- 복소수
- 룬
- 실수
- 문자열
goconst ConstValue int = 10
goconst ConstValue int = 10
- const: 상수 선언 키워드
- ConstValue: 상수명
- int: 타입
gofunc main() { const C int = 20 fmt.Println(&C) // 에러 발생 }
gofunc main() { const C int = 20 fmt.Println(&C) // 에러 발생 }
&로 C 상수의 주소를 찍으면 에러가 발생한다. 왜? 상수는 값으로만 동작한다.
변수에 대해 이야기할 때 변수는 값, 이름 타입, 메모리 주소 4가지 속성을 갖는다고 이야기 했는데, 상수는 값, 이름, 타입 3가지 속성만 갖는다.
8.2.3 iota 로 간편하게 열거값 사용하기
상수는 코드값 그 자체로만 사용하는 경우가 많기 때문에 iota
키워드를 이용하면 편함.
값은 다른 상수와 구별이 되기만하고 키워드가 중요하다는 의미.
아래처럼 사용하면 된다.
iota 의 시작값은 0 이라는 것만 알면 된다.
goconst ( Red int = iota // 0 Blue int = iota // 1 Green int = iota // 2 ) // 간소화해서 표현하면 const ( Red int = iota Blue Green )
goconst ( Red int = iota // 0 Blue int = iota // 1 Green int = iota // 2 ) // 간소화해서 표현하면 const ( Red int = iota Blue Green )
상수는 선언 시 타입을 명시하지 않을 수도 있음. 그러면 타입없는 상수가 된다.
타입없는 상수는 변수에 복사될 때 타입이 정해지기 때문에 여러 타입에 사용되는 상숫값을 사용할 때 편하다.
Chatper 09. if문
if 문은 아래처럼 사용할 수 있다.
조건문 영역에 소괄호()
를 사용하지 않아도 된다. 그러나 복잡한 조건인 경우에는 사용하는게 좋을듯
goif 조건문 { 문장 } else if 조건문 { 문장 } else { 문장 }
goif 조건문 { 문장 } else if 조건문 { 문장 } else { 문장 }
재밌는점. if 문 조건을 검사하기 전에 초기문을 넣을 수 있다.
gopackage main import ( "fmt" ) func Divide(a, b int) (result int, success bool) { if b == 0 { result = 0 success = false return } result = a / b success = true return } func intPtr(x int) *int { return &x } func main() { if a, b := Divide(10, 5); b { fmt.Println(a) } if a, b := Divide(10, 0); b { fmt.Println(a) } else { fmt.Println() } }
gopackage main import ( "fmt" ) func Divide(a, b int) (result int, success bool) { if b == 0 { result = 0 success = false return } result = a / b success = true return } func intPtr(x int) *int { return &x } func main() { if a, b := Divide(10, 5); b { fmt.Println(a) } if a, b := Divide(10, 0); b { fmt.Println(a) } else { fmt.Println() } }
파란색으로 하이라이트한 부분이 초기문
, 핑크색이 조건문
Chapter 10. switch 문
딱히 쓸 일이 없을거같기에, 정리하지 않는다.