1. 함수
func Add(a int, b int) int{
return a+b
}
func : 함수 정의 키워드
같은패키지 안에만 있으면 아무데서나 정의해도 쓸수 있다.
Add : 함수명
매개변수 : 입력이 들어가는곳 (파라미터)
a int, b int
int : 반환타입 : 결과로 어떤 타입이 나오는지
2. 함수 사용 예시
package main
import "fmt"
func Add(a int, b int) int{
return a+b
}
func main(){
c:= Add(3,6)
fmt.Println(c)
}
//9
3. 함수 구조
함수는 반복작업을 하기 싫어서 쓴다.
IP : instruction Point - 실행해야될 지점
PC : Program Count - IP와 같음
함수 호출할때 구조
먼저 넣은게 가장 나중에 나온다.
선입 후출 구조 -> STACK
함수는 코드블럭이다.
코드블럭 : 코드를 블럭단위로 묶어 놓은것
4. 멀티반환 함수
package main
import "fmt"
func Divide(a, b int) (int, bool) {
if b==0{
return 0,false
}
return a/b, true
}
func main(){
c, success := Divide(9,3)
fmt.Println(c,success)
d, success:= Divide(9,0)
fmt.Println(d,success)
}
//3 true
//0 false
멀티반환함수란 반환값이 두개이상인 함수를 의미한다.
입력값이 두개들어오고 그 타입이 같다면 a,b int 처럼 앞에 묶어주고 뒤에 타입을 한번만 적어줘도 된다.
a int, b float, c int 일때 a,c int , b float 으로 써주는건 안된다. 의미가 달라지기 때문이다.
반환도 이처럼 여러개 써줄수 있다.
5. 출력값에 이름지정
package main
import "fmt"
func Divide (a, b int) (result int, success bool){
if b ==0{
result = 0
succcess = false
return
}
result = a/ b
success = true
return
}
func main(){
c, success := Divide(9,3)
fmt.Println(c,success)
d, success := Divide(9,0)
fmt.Println(d, success)
}
// 3 true
// 0 false
함수안에서 출력값에 이름을 지정해서 변수처럼 사용할수 있다.
6. 재귀호출(reculsive function)
package main
import "fmt"
func PrintNO(n int){
if n == 0 { //재귀 호출 탈출 조건
return
}
fmt.Println(n)
PrintNO(n-1)
fmt.Println("After",n)
}
func main (){
PrintNO(3)
}
//3
//2
//1
//After 1
//After 2
//After 3
함수가 끝나면 호출자리로 돌아간다.
PrintNo(3)을 실행하면 다시 PrintNo(2), PrintNo(1), PrintNo(0) 이 순서대로 실행된다.
PrintNo(0)일때는 return 이므로 PrintNo(0)을 호출한자리로 돌아가서 그다음줄을 실행한다.
go 언어는 STACK이 자동증가 된다.
다른언어는 STACK의 사이즈가 정해져 있어서 STACK이 고갈되면 프로그램을 자동종료시키지만
go 언어는 메모리를 써서 메모리가 고갈되지 않는한 프로그램이 종료되지 않는다.
'개발 > Go' 카테고리의 다른 글
[Go] if 문 (0) | 2022.08.15 |
---|---|
[Go] const(상수) (0) | 2022.08.11 |
[Go] 연산자 (0) | 2022.08.10 |
[Go] Golang fmt 패키지 (0) | 2022.08.03 |
[Go] Golang 기초 - 3 (0) | 2022.08.02 |