이번 포스팅에서 다뤄볼 내용은
GoLang의 문법
변수 표현식
Multi Return
Naked Function
defer
에 대해 알아보겠습니다.
GoLang은 간결하고 명확한 문법을 추구합니다.
Go의 문법???
우선 함수의 접근제한자입니다.
Java의 접근 제한자( public, private )를 함수의 첫 글자의 대소문자로 구분합니다.
Go는 JavaScript처럼 Export Default를 하지 않습니다.
import에 선언만 하면 바로 사용할 수 있습니다.
먼저 example.go를 작성합니다.
example.go
package example
import "fmt"
func sayBye(){
fmt.PrintLn("Bye~")
}
func SayHello(){
fmt.PrintLn("Hello!")
}
첫 글자가 대문자인 SayHello인 함수는 import 후에 어디서나 호출 가능합니다.
하지만 소문자인 sayBye 함수는 예외를 발생시킵니다.
main.go
package main
import (
"fmt"
"example"
)
func main(){
// 메소드의 첫 글자가 대문자인 경우 Public 접근 제한자가 설정됩니다.
example.SayHello()
// 메소드의 첫 글자가 소문자인 경우 Private 접근 제한자가 설정됩니다.
// 따라서 예외가 발생됩니다.
example.sayBye()
}
또한, Go는 생성자 메서드를 직접 수동으로 만들어 주어야 합니다.
Java의 new Method();
JavaScript Class의 constructor()
Python의 __init__처럼 선언과 동시에 초기화를 하지만 Go에서는 따로 해주어야 합니다.
다음은
변수와 상수입니다. ( var, const )
JavaScript의 var와 const의 개념과 유사합니다.
TypeScript처럼 변수 혹은 상수의 유형( Type )을 미리 선언할 수 있습니다.
다음 예제는 전역 변수, 지역 변수 둘 다 설정 가능합니다.
UnType
const c_name = "juwon"
var c_name2 = "juwon"
Type
const v_name string = "juwon"
var v_name2 string = "juwon"
Type 바인딩(축약형 선언)입니다. ( 지역변수로만 선언 가능합니다. )
name := "juwon" // string type으로 자동 바인딩
age := 1 // int type으로 자동 바인딩
함수 표현식입니다.
Go의 경우 리턴 타입을 매개변수 선언한 다음에 표기해줍니다.
Java
public int multiply(int a, int b){
return a * b;
}
Go
func Multiply(a, b int) int{
return a * b // Go의 컴파일러가 컴파일 시점에 자동으로 세미콜론( ; )을 붙여 줍니다.
}
다음은 Java에는 없는
Multi Return입니다. ( ignore variable )
// return을 int 타입과 string 타입으로 선언
func lenAndUpper(name string)(int, string){
// len()과 strings.ToUpper는 go가 가지고 있는 내장 메소드입니다.
return len(name), strings.ToUpper(name)
}
func main(){
length, upperName := lenAndUpper("juwon")
fmt.PrintLn(length, uppercase)
// 이처럼 Java에는 없는 Multi Return이 가능합니다.
// 하지만 Multi Return 중 하나의 리턴값만 사용하고 싶을 경우
length, upperName := lenAndUpper("juwon")
// upperName을 선언만 했기 때문에 decalered but not used 예외가 발생합니다.
fmt.PrintLn(length)
// 이러한 경우 Go에서는 _ ( ignore variable)를 사용할 수 있습니다.
length, _ := lenAndUpper("juwon")
fmt.PrintLn(length) // _로 무시할 수 있습니다.
}
Naked Return입니다. ( 벌거벗은 반환값? )
Naked Return은 Go Compiler에게 미리 선언한 변수명과 변수의 타입으로 리턴한다는 것을 알려주고
컴파일하겠다는 뜻과 같습니다.
// naked return은 var length int, var uppercase string를 미리 선언하는 것과 같습니다.
func lenAndUpper(name string) (length int, uppercase string){
// naked return 구문에 의해 length := 생략됨
length = len(name)
uppercase = strings.ToUpper(name)
return
}
func main(){
totalLength, upperCase := lenAndUpper("juwon")
fmt.PrintLn(totalLength, upperCase)
}
defer 입니다.
defer는 함수의 리턴 후에 실행할 수 있는 문법입니다.
func lenAndUpper(name string) (length int, uppercase string){
defer fmt.PrintLn("defer는 메소드의 Return 이후에 실행되는 구문입니다.")
length = len(name)
uppercase = strings.ToUpper(name)
return
}
func main(){
totalLength, upperCase := lenAndUpper("juwon")
fmt.PrintLn(totalLength, upperCase)
}
이번 포스팅으로 GoLang의 기본 문법들을 알아보았습니다.
'Backend > GoLang' 카테고리의 다른 글
[Golang] Channel 과 비동기 메커니즘의 GoRoutine을 알아보자! (0) | 2022.02.05 |
---|---|
[Golang] Go만의 구조체(struct)와 메소드(method) 사용법 (0) | 2022.02.05 |
WSL( Ubuntu 20.04 )에 Go 설치하기 (0) | 2022.01.29 |
Google Go 언어에 대해 알아보자! ( GoLang ) (0) | 2022.01.28 |