[Go] 함수(function)

2022. 8. 10. 09:28·개발/Go
728x90
반응형

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 언어는 메모리를 써서 메모리가 고갈되지 않는한 프로그램이 종료되지 않는다.

728x90
반응형

'개발 > 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  (1) 2022.08.02
'개발/Go' 카테고리의 다른 글
  • [Go] if 문
  • [Go] const(상수)
  • [Go] 연산자
  • [Go] Golang fmt 패키지
TeTedo.
TeTedo.
  • TeTedo.
    TeTedo 개발 일기
    TeTedo.
  • 전체
    오늘
    어제
    • 분류 전체보기 (319)
      • 개발 (274)
        • Article (4)
        • 정리 (21)
        • Spring Boot (17)
        • JPA (2)
        • JAVA (6)
        • Database (4)
        • 자료구조 (11)
        • 알고리즘 (32)
        • React (20)
        • Docker (10)
        • node.js (18)
        • Devops (11)
        • Linux (4)
        • TypeScript (3)
        • Go (10)
        • HyperLedger (4)
        • BlockChain (43)
        • html, css, js (48)
        • CS (3)
        • AWS (3)
      • 모아두고 나중에 쓰기 (3)
      • 팀프로젝트 (18)
        • SNS(키보드워리어) (9)
        • close_sea (9)
      • 개인프로젝트 (1)
        • Around Flavor (1)
        • CHAM (13)
        • ethFruitShop (5)
      • 독서 (0)
        • 스프링부트와 AWS로 혼자 구현하는 웹 서비스 (0)
  • 블로그 메뉴

    • 홈
    • 개발일기
    • CS
    • 실습
    • 코딩테스트
    • 웹
    • Go
    • node.js
    • 팀플
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    node.js
    도커
    30일챌린지
    html
    블록체인
    30일 챌린지
    프로그래머스
    go언어
    mysql
    node
    React
    go
    ERC721
    명령어
    컨테이너
    js
    CSS
    erc20
    하이퍼레저
    nodejs
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
TeTedo.
[Go] 함수(function)
상단으로

티스토리툴바