본문 바로가기

IT/GO

Go 언어 스터디 - 함수

728x90

기본 형식

// 함수 정의
func 함수명(매개변수 매개변수타입-여러개 가능) 리턴타입 {
  실행코드
  return 리턴값
 }
 
 ----------------------------------------------
 
 // 예시 코드
 package main
 
 import (
   "fmt"
 )
 
 func add(x int, y int) int {
   return x+y
 }
 
 // 함수 호출
func main() {
  num := add(2,4)
  fmt.Println(num)
}

------------------------------------------------
// 실행
$ go run ./main.go
6

- 매개변수가 필요 없는 경우 작성하지 않을 수 있습니다.

- 리턴타입은 반환되는 값이 없는 경우 사용하지 않을 수 있습니다.

 

 

여러개 반환 형식

// 함수 정의
func 함수명(매개변수 매개변수타입-여러개 가능) (리턴타입1, 리턴타입2-여러개 가능) {
  실행코드
  return 리턴값1, 리턴값2
 }
 
 ----------------------------------------------
 
 // 예시 코드
 package main
 
 import (
   "fmt"
 )
 
 func calc(x int, y int) (int, int) {
   return x+y, x-y
 }
 
 // 함수 호출
func main() {
  num1, num2 := calc(4,2)
  fmt.Println(num1, num2)
}

------------------------------------------------
// 실행
$ go run ./main.go
6 2

 

변수로 반환 형식

// 함수 정의
func 함수명(매개변수 매개변수타입-여러개 가능) (리턴변수명 리턴타입-여러개 가능) {
  실행코드
  리턴변수에 대입
  return (리턴 변수에 대입하였으므로 return만 작성)
 }
 
 ----------------------------------------------
 
 // 예시 코드
 package main
 
 import (
   "fmt"
 )
 
 func add(x int, y int) (val int) {
   val = x + y
   return
 }
 
 // 함수 호출
func main() {
  num := add(4,2)
  fmt.Println(num)
}

------------------------------------------------
// 실행
$ go run ./main.go
6

 

함수 내부의 변수 사용 범위

  • 함수 내부의 변수는 외부에서 사용할 수 없음
 // 예시 코드
 package main
 
 import (
   "fmt"
 )
 
 func myName() string {
   // 함수 내부에서 변수선언
   name := "golang"
   return name
 }
 
 // 함수 호출
func main() {
  fmt.Println(name) //에러
}

------------------------------------------------
// 실행
$ go run ./main.go
./main.go::: undefined: name
 // 예시 코드
package main
 
import (
  "fmt"
)
 
func addOne(num int) {
 fmt.Println("addOne: ", num) //2
 num += 1
}
 
// 함수 호출
func main() {
  num := 1
  addOne(num)
  fmt.Println("main: ", num) //여기 num은 main 함수의 num 이므로 2가 아닌 1이 출력됨
}

------------------------------------------------
// 실행
$ go run ./main.go
addOne: 2
main: 1

 

포인터를 매개 변수로 사용 (값을 참조)

 // 예시 코드
package main
 
import (
  "fmt"
)
 
func addOne(num *int) {
 *num += 1 // 넘어온 주소에 값을 넣음
}
 
// 함수 호출
func main() {
  num := 1
  addOne(&num) // main함수의 num 변수 주소를 addOne 함수에 넘겨줌
  fmt.Println("main: ", num) //주소의 값이 변경되었으므로 2가 출력
}

------------------------------------------------
// 실행
$ go run ./main.go
main: 2

- 포인터를 잘 이해한 상태에서 사용하기를 권합니다.

728x90