개발이야기/GO

GO 변수 / 함수 기본(다중 값 리턴, 다중 인자 받기)

쪼린이 2021. 5. 14. 18:44

처음 배우는 GO의 아주 기초적인 변수와 함수 표현 방식을 적어보려한다.

(노마드 코더 강의의 흐름대로 정리 중)

기본형 작성

func main(){
	var name string = "merry"
	// name := "merry"
	// line 6과 7은 동일한 기능이다.
	// ':=' 와 같이 표기하면 GO는 해당 변수 값에 대한 type을 찾아서 정의한다.
	// 이 표현은 func 안에서만 가능하다.

	name = "charlie"
	fmt.Println(name)
}

 

func multiply(a, b) {
	return a * b
}

func main(){
	fmt.Println(multiply(2, 2))
}

 

위와 같이 인자를 넣어 함수를 호출할 경우 에러가 발생한다.

 

 

메시지를 보면 파라미터의 타입과 리턴 타입을 표기해주지 않아서 나는 에러이다.

 

func multiply(a, b int) int {
	return a * b
}

func main(){
	fmt.Println(multiply(2, 2))
}

 

올바른 방법은 위와 같이 호출되는 함수 매개변수 옆에 해당 변수의 타입을 적어주고, 중괄호 앞에 리턴 타입을 적어주면 된다.

위의 예시는 a, b 모두 int로 타입을 지정하고 있는데, 만약 다른 타입이라면 'a int, b string'과 같이 따로 적어주면 된다.

다중 값 RETURN

func lenAndUpeer(name string) (int, string) {
	return len(name), strings.ToUpper(name)
}

func main() {
	totalLength, upperName := lenAndUpeer("goTest")
	fmt.Println(totalLength, upperName)
      // 6, GOTEST

      /* 
      GO 언어는 사용하지 않는 변수를 선언해놓을 경우 'unused~' 에러가 난다.
      만약 다중 값이 리턴되는데 하나의 값만 받고 싶을 경우,
      받고 싶지 않은 반환 값을 무시하는 코드를 짜면 되는데 아래와 같다.
      */

      totalLength, _ := lenAndUpeer("goTest")
      fmt.Println(totalLength)
      // 위와 같이 underscore(_)로 표현할 경우 해당 값은 반환되지 않는다.
}
    
    

다중 인자 값

func repeatMe(words ...string) {
	fmt.Println(words)
}

func main() {
	repeatMe("nico", "lynn", "dal", "marl", "flynn")
    //[nico lynn dal marl flynn]
}

 

GO 언어는 JAVA와 다르게 코드 말미에 세미콜론(;)을 안 찍어도 컴파일 에러가 안나서 신기하다.