티스토리 뷰
Go 언어 기본 문법
1. 프로그램 구조
Go 프로그램의 기본 구조는 C와 유사하지만, package
와 import
키워드를 사용합니다. C의 #include
와 비슷하게, Go에서는 import
로 필요한 패키지를 가져옵니다.
package main // 실행 가능한 프로그램은 항상 'main' 패키지로 시작
import "fmt" // C의 stdio.h와 비슷하게 fmt 패키지로 표준 입출력 기능 사용
func main() { // C의 main 함수와 유사
fmt.Println("Hello, World!") // 표준 출력
}
2. 변수 선언
Go에서는 변수 선언이 var
키워드와 타입을 이용해 이루어집니다. 기본적으로 타입은 변수명 뒤에 위치합니다. :=
를 사용하면 Go가 자동으로 타입을 추론할 수 있습니다.
var x int = 10 // 명시적 선언
y := 20 // 암시적 선언, y는 int로 추론
C와는 다르게 Go에서는 선언된 변수는 반드시 사용해야 합니다. 사용하지 않으면 컴파일 에러가 발생합니다.
3. 함수 선언
Go의 함수 선언은 C와 비슷하지만, 반환 타입이 함수 선언의 마지막에 위치합니다.
func add(a int, b int) int {
return a + b
}
반환 타입을 명시적으로 지정하며, 여러 반환 값을 지원합니다.
func swap(x, y int) (int, int) {
return y, x
}
4. 포인터
Go에서도 C와 마찬가지로 포인터를 사용할 수 있지만, 포인터 연산은 제한적입니다. *
와 &
연산자는 여전히 사용됩니다.
var p *int
i := 42
p = &i // p는 i의 주소를 가리킴
fmt.Println(*p) // p가 가리키는 값 출력 (42)
Go에서는 포인터 산술(pointer arithmetic)을 지원하지 않으며, 이는 메모리 안전성을 유지하기 위함입니다.
5. 제어문
Go의 if
, for
, switch
는 C와 유사하지만, 괄호를 생략합니다. for
는 Go에서 유일한 반복문입니다.
for i := 0; i < 10; i++ { // 전통적인 for 문
fmt.Println(i)
}
if x := 10; x > 5 { // 조건문에서 변수 선언 가능
fmt.Println("x is greater than 5")
}
switch x { // C의 switch와 유사하지만, break를 명시적으로 쓰지 않음
case 1:
fmt.Println("One")
case 2:
fmt.Println("Two")
default:
fmt.Println("Other")
}
6. 문자열
Go에서는 문자열이 불변(immutable)입니다. C와 달리, 문자열은 포인터가 아닌 고정 길이의 배열처럼 다루어지며, string
타입이 따로 존재합니다.
7. 구조체와 메서드
Go에서 구조체는 C와 유사하게 정의됩니다. 하지만 메서드를 구조체에 추가할 수 있습니다.
type Person struct {
Name string
Age int
}
func (p Person) Greet() { // 메서드 선언
fmt.Printf("Hello, my name is %s and I am %d years old.\n", p.Name, p.Age)
}
8. 메모리 관리
Go는 자동으로 메모리를 관리하는 가비지 컬렉터(Garbage Collector)가 있어서, C처럼 수동으로 메모리를 할당(malloc
)하고 해제(free
)할 필요가 없습니다.
9. 병행성(Concurrency)
Go는 고루틴(goroutine)을 통해 매우 간단하게 병행성을 구현할 수 있습니다. go
키워드를 사용해 함수 호출을 병행으로 실행할 수 있습니다.
go func() {
fmt.Println("Concurrent Go Routine!")
}()
요약
- Go는 C와 유사한 구문을 가지고 있지만, 더 간결하고 현대적인 기능을 지원합니다.
- 메모리 관리가 자동화되어 있고, 포인터 연산이 제한적입니다.
- 병행성을 쉽게 구현할 수 있는 고루틴을 제공하여, 고성능 서버 프로그래밍에 적합합니다.
'프로그래밍 > golang' 카테고리의 다른 글
go언어로 json파싱해보기 (0) | 2024.09.13 |
---|---|
Go 언어로 HTTP 요청 보내보기 (0) | 2024.09.13 |
Go언어가 C언어에 비해 좋은 점은 뭘까? (0) | 2024.09.13 |
GO언어 자료형에 대해 설명해보자 (0) | 2024.09.13 |
mac에서 go 개발환경 만들어보기 (1) | 2024.09.13 |
- Total
- Today
- Yesterday
- ios
- JavaScript
- 스핀락
- frida
- HTML
- SWiFT
- 트렌드
- JSX
- go
- Java
- CSS
- Python
- 유튜브
- 예제
- 부동산
- Spring
- react
- 파이썬
- 투자
- Backend
- ChatGPT
- Linux
- WinAPI
- Frontend
- Windows
- golang
- reactjs
- 생각
- 커널드라이버
- 주식
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |