# Go 언어 백엔드 완벽 가이드
## 학습 목표
Go 언어로 고성능 백엔드 서버를 구축하는 방법을 배웁니다.
## 1. Go란?
Google이 만든 빠르고 간결한 컴파일 언어입니다.
- 컴파일 속도가 매우 빠름
- 동시성 처리가 뛰어남 (goroutine)
- 단일 바이너리로 배포 간편
- 메모리 관리가 효율적
## 2. 설치 및 환경설정
# 다운로드: go.dev
go version
# 프로젝트 초기화
mkdir myapp && cd myapp
go mod init myapp
## 3. 기본 문법
package main
import "fmt"
func main() {
var name string = "Kim"
age := 25
if age >= 18 {
fmt.Println("성인")
}
for i := 0; i < 5; i++ {
fmt.Println(i)
}
}
## 4. 함수와 에러 처리
func divide(a, b int) (int, error) {
if b == 0 {
return 0, errors.New("0으로 나눌 수 없음")
}
return a / b, nil
}
result, err := divide(10, 2)
if err != nil {
log.Fatal(err)
}
## 5. 구조체와 메서드
type User struct {
ID int
Name string
Email string
}
func (u User) Greet() string {
return "Hello, " + u.Name
}
user := User{ID: 1, Name: "Kim"}
fmt.Println(user.Greet())
## 6. 기본 HTTP 서버
package main
import (
"fmt"
"net/http"
)
func handler(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hello, World!")
}
func main() {
http.HandleFunc("/", handler)
http.ListenAndServe(":8080", nil)
}
## 7. Gin 프레임워크
r := gin.Default()
r.GET("/ping", func(c *gin.Context) {
c.JSON(200, gin.H{"message": "pong"})
})
r.GET("/users/:id", func(c *gin.Context) {
id := c.Param("id")
c.JSON(200, gin.H{"user_id": id})
})
r.POST("/users", func(c *gin.Context) {
var user User
c.BindJSON(&user)
c.JSON(201, user)
})
r.Run(":8080")
## 8. 데이터베이스 연동 (GORM)
type Product struct {
gorm.Model
Name string
Price uint
}
db, _ := gorm.Open(mysql.Open(dsn), &gorm.Config{})
db.AutoMigrate(&Product{})
db.Create(&Product{Name: "Laptop", Price: 1000})
db.First(&product, 1)
db.Model(&product).Update("Price", 1200)
db.Delete(&product, 1)
## 9. 동시성 (Goroutine & Channel)
go func() {
fmt.Println("병렬 실행")
}()
ch := make(chan int)
go func() {
ch <- 42
}()
result := <-ch
var wg sync.WaitGroup
wg.Add(1)
go func() {
defer wg.Done()
}()
wg.Wait()
## 10. 빌드 및 배포
go build -o app
GOOS=linux GOARCH=amd64 go build -o app-linux
./app
## 추천 학습 순서
1. Go 기본 문법 익히기
2. net/http로 간단한 서버 만들기
3. Gin 프레임워크 학습
4. GORM으로 DB 연동
5. goroutine으로 동시성 처리