[Go] Go 언어 예제와 기본 문법 정리 1탄
(패키지, 임포트와 익스포트, 세미콜론, 주석)
(Go 언어 버전 : 1.13.7, 글쓴날 : 2020.02.13)
* 이 글은 글쓴이가 공부한 내용을 정리하며 올리는 글입니다.
* 글의 내용은 공식 홈페이지 및 튜토리얼을 기반으로 공부하여 작성하였습니다.
* Go 언어가 처음이시라면 ☞ [Go] Go 언어 소개와 설치 및 컴파일 방법
Go 언어 기본 문법 정리
* Hello, World! 예제를 통해 파악하기
이번 글에서는 모든 프로그램의 시초인 Hello, World! 예제를 통해 가볍게 Go 언어의 기본 문법을 알아보겠습니다.
1
2
3
4
5
6
7
|
package main
import "fmt"
func main() {
fmt.Println("Hello, World!")
}
|
무심코 넘어가는 위의 기본 Hello, World! 예제에서 얻을 수 있는 정보가 매우 많습니다.
(1) 패키지(Packages)
Go 프로그램은 모두 패키지로 구성되며 프로그램은 main 패키지에서 실행을 시작합니다.
(마치 Java가 생각나네요.)
위의 예제의 3번째 라인에서 fmt 패키지를 추가로 import 하고 있습니다.
* fmt 패키지
기본적인 입출력을 담당하는 패키지로 C언어의 stdio 헤더와 유사한 기능을 한다 보시면 되겠습니다.
잠깐 출력함수를 살펴보면 Println(), Print(), Printf()의 세가지 함수가 있습니다. (진짜 Java랑 비슷하네요?!)
1
2
3
4
5
6
7
8
9
|
package main
import "fmt"
func main() {
fmt.Println("Hello, Minchan!")
fmt.Print("Hello, Minchan?")
fmt.Printf("Hello, Minchan~")
}
|
- Println() : ,(쉼표)로 구분지어 여러 인자를 받을 수 있으며 마지막에 자동 개행(줄바꿈)을 합니다.
- Print() : ,(쉼표)로 구분된 인자간에 띄어쓰기를 하지 않으며 마지막에 자동 개행또한 하지 않습니다.
- Printf() : %Format(형식지정자)를 사용할수있습니다.
1
2
3
4
5
6
7
8
9
10
|
package main
import "fmt"
func main() {
fmt.Println("Hello~,", "I'm Minchan", "24 years old!") // ,(쉼표)로 구분해 여러 인자를 전달 가능합니다!
fmt.Print("Hello~, ", "I'm Minchan ") // 인자마다 띄어쓰기를 하지 않고 마지막에 줄바꿈을 하지 않아요!
fmt.Printf("%d years old!", 24) // 형식 지정자를 사용할 수 있어요!
}
|
위 예제의 실행 결과입니다.
(2) 임포트(Import)와 익스포트(Export)
위에서 보셨듯이 Go 언어에서 외부 패키지를 임포트(Import) 하려면 import 키워드를 사용해 해당 패키지에 접근하실 수 있습니다.
또한, 여러 패키지를 임포트 하실 때 소괄호에 감싸 한 번에 처리하실 수도 있습니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
package main
import (
"fmt"
"math"
)
// import의 2가지 방식입니다.
/*
import "fmt"
import "math"
*/
func main() {
fmt.Printf("Hello~ Pi is %f!", math.Pi)
}
|
익스포트(Export)의 경우는 조금 특이합니다. Go 언어에서는 패키지 레벨의 익스포트(Export)를 통해 캡슐화를 지원합니다.
* 캡슐화 : 객체지향 프로그래밍(OOP)의 메커니즘으로 접근 제한을 통해 데이터를 관리하는 방법입니다.
Go 언어에서는 익스포트(Export)되는 데이터(변수, 상수, 메서드 등)의 첫 글자가 대문자로 시작하면 외부에서 접근이 가능하고 소문자일 경우 접근이 불가능합니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
package main
import (
"fmt"
"math"
)
func main() {
/*
에러 발생!
fmt.Printf("Hello~ Pi is %f!", math.pi)
math 패키지 Pi의 첫 글자가 소문자일 경우 참조할 수 없습니다!
*/
fmt.Printf("Hello~ Pi is %f!", math.Pi)
}
|
(3) ;(세미콜론)
눈치채셨겠지만 위의 예제들에서는 ;(세미콜론)을 사용하지 않았습니다. (못 채셨다면 Python 프로그래머시군요? ㅎ_ㅎ)
그렇다면 Go 언어는 Python처럼 ;(세미콜론)을 사용하지 않느냐???
정답은 그렇지 않습니다!!
Go 언어도 C 언어나 Java와 마찬가지로 문장의 끝에 ;(세미콜론)을 붙여 문장의 끝을 인식하지만,
Go 언어의 Lexer(어휘 분석기)가 간단한 규칙을 통해서 마치 JavaScript의 세미콜론 자동 삽입 기능(Automatic Semicolon Insertion, ASI)처럼, 프로그래머가 명시적으로 코드에 ;(세미콜론)을 작성하지 않았더라도 컴파일 시 각 문장의 끝에 생략된 ;(세미콜론)을 자동으로 삽입해 줍니다.
1
2
3
4
5
6
7
8
9
10
|
package main
import (
"fmt"
)
func main() {
fmt.Println("Hello ; ") // ;(세미콜론 생략.)
fmt.Println("Hello ; "); // ;(세미콜론 명시.)
}
|
따라서 출력 문장의 끝에 ;(세미콜론) 유무만 다른 위 예제의 결과는 서로 동일합니다.
단, 이러한 ;(세미콜론) 자동 삽입 기능에는 주의할 점이 있습니다!
{ 같은 여는 중괄호를 함수 선언문 혹은 반복문, 조건문과 같은 제어문 바로 뒤에 반드시 써줘야 합니다.
무슨말이냐 하면...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
package main
import (
"fmt"
)
/*
에러 발생!
↓ { 가 없습니다!!
func main()
{
fmt.Println("Hello")
}
*/
func main() {
fmt.Println("Hello")
}
|
위의 예제에서 주석 처리 된 부분을 보시면, 9번째 줄의 func main() 함수 선언문 뒤에 바로 { 를 적지 않고 C 언어나 Java처럼 내려 적은 걸 볼 수 있습니다.
Go 언어에서는 저렇게 코딩하는 순간 func main()을 문장의 끝으로 판단하여 ;(세미콜론)을 자동으로 삽입하므로 에러가 발생하게 됩니다.
그러므로, Go 언어 프로그래밍 시에는 15~17번째 줄처럼 항상 { 의 위치를 생각해서 코딩하셔야 합니다.
(4) 주석
마지막으로 Go 코드에서 주석 처리하는 방법입니다.
역시 눈치가 빠르신 분들은 위의 예제들 속에서 이미 캐치하셨을 것 같습니다!
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
package main
import (
"fmt"
)
func main() {
/*
fmt.Println("저")
fmt.Println("는")
fmt.Println("여")
fmt.Println("러")
fmt.Println("줄")
fmt.Println("주")
fmt.Println("석")
fmt.Println("이")
fmt.Println("에")
fmt.Println("요")
*/
// fmt.Println("저는 한 줄 주석이랍니다. ~.~")
fmt.Println("Hello, World!")
// fmt.Println("드디어 끝나간다!")
}
|
네, 설명은 필요 없을 것 같네요.....
여기까지 Go 언어 예제와 기본 문법 정리 1탄이었습니다.
도움이 많이 되셨나요? 안 되셨더라도 저는 공부가 됐습니다. ^^
장난이고요.. 제일 간단한 Hello, World! 프로그램인데도 이렇게 많은 정보들이 담겨 있었습니다.
다음 2탄에서는 1탄에서 다루지 않은 예제와 Go 언어의 문법에 대해 알려드리도록 하겠습니다.
감사합니다!
'Deprecated' 카테고리의 다른 글
[Go] Go 언어 예제와 기본 문법 정리 2탄(변수 var, 상수 const) (0) | 2020.02.16 |
---|---|
[Python] Python 소개와 설치 방법 (4) | 2020.02.14 |
[Go] Go 언어 소개와 설치 및 컴파일 방법 (4) | 2020.02.12 |
[Node.js] PM2 소개와 설치 및 사용법 (0) | 2020.02.11 |
[Node.js] npm 소개와 설치 및 사용법 (3) | 2020.02.10 |