이번 시간에는 Go언어 정적 타입언어와
동적 프로그래밍을 알아보도록 하겠습니다.
정적 타입 언어, 동적 프로그래밍
Go는 엄격하게 타입을 확인하는 정적 타입 언어지만,
동적 타입 언어의 특성도 수용하고 있습니다.
변수의 타입을 지정하지 않더라도
컴파일러가 변수에 할당되는 값의 타입을
알아서 결정하며 인터페이스는
덕 타이핑 방식으로 동작합니다.
Go의 모호한 요소제거
Go는 코드를 작성할 때 혼동을
줄 수 있는 모호한 문법을 피했습니다.
++(증가)과 --(차감)같은 증감 연산자는
후치 연산으로만 사용이 가능하고
증감 연산에는 반환 값이 없습니다.
즉 i = i++또는 ++i 같은 코드가
허용되지 않습니다.
그리고 C나 C++처럼 변수의
메모리 주소에 접근할 수 있게
포인터 사용을 허용하지만
포인터 연산은 허용되지 않습니다.
이는 포인터의 과다한 사용으로 코드가
복잡해지는 것을 방지하기 위해서입니다.
증감 연산자는 반환 값이 X
package main
import "fmt"
func main() {
sum, i := 0, 0
for i < 10 {
sum += i++ // 증감 연산자는 반환값이 없다, 컴파일 에러가 발생
}
fmt.Println(sum)
}
실행 결과
./increase.go:8:11: syntax error: unexpected ++ at end of statement
증감 연산자는 전치 연산이 허용되지 않음
package main
import "fmt"
func main() {
sum i := 0,0
for i < 10 {
sum += i
++i // 증감 연산자의 전치 연산은 허용되지 않음, 컴파일 에러 발생
}
}
실행 결과
./increase-not-transposition.go:9:3: syntax error: unexpected ++
세미콜론은 생략이 가능하다
Go에서는 세미콜론( ; )으로 문자의 끝을 표시합니다.
Go 컴파일러는 세미콜론을 기준으로
문장을 인식합니다. 그래서 문장 여러 개를
세미콜론으로 구분해 한 줄에 작성할 수도
있습니다.
그런데 실제로 Go 코드를 보면 세미콜론이
거의 보이지 않는데, 컴파일러가 컴파일할 때
각 문장의 끝에 세미콜론을 넣어주므로써
실제 코드를 작성할 때는 꼭 필요할 경우가
아니라면 세미콜론을 넣을 필요는 없습니다.
두 개 이상의 문장을 한 줄에 작성할 때만
문장을 구분하는 용도로만 세미콜론을
삽이할 수 있습니다.
하지만 이것이 오히려 Go를 사용할 때
제약이 되기도 합니다.
예를 들어서 중괄호({})의 여는 괄호( { )는
반드시 제어문이나 함수가 시작되는 줄의
끝에 써야 합니다.
컴파일러가 문장의 끝에 세미콜론을
삽입하므로 다른 줄에 여는 괄호를 쓰면
컴파일 오류가 발생합니다.
세미콜론 자동 삽입으로 인한 컴파일 오류 발생
package main
import "fmt"
func main() {
for i := 0; i <= 5; i++ {
fmt.Print(i)
}
for j := 5; j >= 0; j-- // for문 끝에 세미콜론이 삽입되 컴파일 오류가 발생한다.
{
fmt.Print(j)
}
}
# command-line-arguments
./semicolon-auto-comfile-error.go:10:103: syntax error: unexpected newline, expecting { after for clause
이 코드를 컴파일하면 두 번째 for문의
여는 괄호( { ) 앞에 세미콜론이 삽입되어
컴파일 오류가 발생합니다.
Go의 주석 사용법
Go 언어는 다음과 같이 주석을 사용합니다.
// 다음에 나타나는 문자는 모두 주석처리
package main
import "fmt"
func main() {
fmt.Println("Hi Hello") // Hi Hello 출력
}
줄 내부에서 일부분만 주석으로 만들거나
여러 줄을 주석으로 만들 떄는 /* */ 를 사용합니다.
package main
import "fmt"
func main() {
/*
GO 프로그램
인사말 출력
*/
fmt.Println( /*인사말*/ “Hello world!”)
}
참고자료
'프론트 엔드 > Go' 카테고리의 다른 글
[Go] Gofmt로 코드 서식 지정, Gofmt 도구 (0) | 2023.01.16 |
---|---|
[Go] Go 코드 분석기와 웹페이지 띄우기, 기본 문법 - 반복문 (0) | 2023.01.09 |
[GO] 리눅스 버전 Go 설치하기 - 헬로우 월드 출력 (0) | 2023.01.09 |