Concept

Basic Types

다른언어와 비슷하다.

  • string type
    • string
  • boolean type
    • bool
  • numeric types
    • int8, uint8, int16 .... int64, uint64, int, uint, uintptr
    • float32, float64
    • complext64, complex128

 

 

functions

파라미터로 int형 숫자 2개를 보내고 곱한 값을 Return하는 함수를 만들어보자.

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

 

Go에서의 함수는 왼쪽이 파라미터 명, 오른쪽이 타입이다. 또한, return이 있다면 () 오른쪽에 return type을 지정해주어야 한다. 아래처럼 파라미터의 타입이 모두 동일한 경우 맨 오른쪽에만 타입을 지정해줘도 된다. 

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

 

또한, 여러 타입들을 한 번에 return 해올 수 있다. (Java에는 없었던 기능)

func getNameAndPhoneNumber() (string, int) {
	return "qazyj", 123456789
}

위와 같이 타입이 다른 변수 두개를 return할 수 있다.

func main() {
	name, number := getNameAndPhoneNumber()
	fmt.Print(name, number)
}

받는 방법은 위와같은 방법으로 받을 수 있다. 또한, return한 값을 사용하고 싶지 않을 때는 _를 사용하면 된다. (에러를 Return하는 경우  사용되지 않는 경우가 있기도 함.)

func main() {
	name, _ := getNameAndPhoneNumber()
	fmt.Print(name)
}

_를 하는 이유는 _를 하지않고 name만 return 받으려고 위와 같이 작성하면 에러가 발생한다. _는 무시되는 value로 컴파일 시에 무시된다.

 

functions에서 argument를 무제한으로 받을 수 있는 방법도 있다. type앞에 ...을 붙이면 된다.

func main() {
	repeatMe("q", "a", "z", "y", "j")
}

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

출력

 

 

Naked Return

return 오른쪽에 return되는 값을 넣어주는 것이 아닌 Return Type을 적어주는 곳에 return 값을 넣음. 

 

사용 방법

func main() {
	fmt.Print(lenAndUpper("qazyj"))
}

func lenAndUpper(name string) (length int, uppercase string) {
	length = len(name)		// return 값에 선언해준 변수명이랑 같아야함
	uppercase = strings.ToUpper(name)     // return 값에 선언해준 변수명이랑 같아야함
	return // 필수
}

 

 

defer

function이 끝날 때, 추가적으로 무엇인가 동작할 수 있도록 하는 기능
Java에서 못봤던 기능인 것 같은데, 유용하게 쓰일 수 있는 기능 같다.
ex) 이미지를 열거나 파일을 생성하고나서 defer로 이미지, 파일을 닫던가 삭제하는, API로 요청을 보낸다던가 등

 

테스트

func lenAndUpper(name string) (length int, uppercase string) {
	defer fmt.Println("I am done.")			// ..1 
	fmt.Println("lengAndUpper Start")			// ..2
	length = len(name)
	uppercase = strings.ToUpper(name)
	fmt.Println("lengAndUpper Finish")			// ..3
	return
}

출력

defer라는 기능을 통해 1 -> 2 -> 3 번 순서로 출력이 되어야 할 출력물이, 2 -> 3 -> 1 번 순서로 출력되는 것을 볼 수 있다.

 

 

 

 

 

 

 

 

'Go' 카테고리의 다른 글

If/switch  (0) 2023.12.28
for, range, args  (0) 2023.12.28
Variables/Constants  (0) 2023.12.27
Import/Export  (0) 2023.12.24
package와 main  (0) 2023.12.24

+ Recent posts