Golang의 특징을 보다가 정리 차원에서 여기에 몇 자를 적는다.

  1. 포인터 지원
  2. 구조체 지원, class라 불리우는 건 없음 : 정말 C처럼 만들고 싶었나 보다.
  3. 메서드가 대신 존재
 
//Rect - struct 정의
type Rect struct {
    width, height int
} 

//Rect의 area() 메소드
func (r Rect) area() int {
    return r.width * r.height   
}
 
func main() {
    rect := Rect{10, 20}
    area := rect.area() //메서드 호출
    println(area)
}
  1. 고루틴의 존재
  • 간편한 동기 처리를 위해 고루틴이 존재
  • 다른 프로그램은 고루틴을 기다리지 않는다. 동기화 싱크가 필요
    • sync.WaitGroup사용
    • Add, Done, Wait 사용
package main

import (
    "fmt"
    "sync"
    "time"
)
var wg sync.WaitGroup

func job(s string){
  //defer wg.Done()
  for i:=0 ; i<3 ; i++ {
    time.Sleep(100*time.Millisecond)
    fmt.Println(s)
  }
  wg.Done()
}
func main() {
	wg.Add(1)
  go job("첫번째 작업")
  wg.Add(1)
  go job("Second work")
	wg.Add(1)
	go job("三番目の作業")
  wg.Wait()
}

고루틴이 동기화 프로그램 자체가 아니라 동기화 지원 도구라는 이슈가 있기는 하다.

어떻게 보면 C의 정신을 계승하려는 의지가 많이 보였으며, 배열 등의 데이터 처리, 묵시적 선언 등은 파이썬을 좀 닮은 곳도 있어 보인다.

이제야 Go를 보고 있다니.. 당분간 Go와 사랑에 빠질 것 같다.