[Go] 설치 및 기본 사용 방법

서론

노마드 코더에서 무료인 쉽고 빠른 Go 시작하기 강의 내용을 코딩하며 정리하였습니다.

시작

https://go.dev/ 페이지에서 Go를 다운로드 합니다. 다운로드 완료 시 설치파일을 실행하여 설치합니다. 그리고 폴더를 다음과 같이 생성합니다.

  1. mkdir github.com/hgko1207
  2. cd github.com/hgko1207
  3. mkdir learngo
  4. cd learngo
  5. go mod init github.com/hgko1207/learngo

코딩

  • main.go 는 컴파일을 위한 파일
  • export 함수를 만들 경우 함수명 맨 앞에 대문자로 작성
  • function -> func
  • null -> nil

상수와 변수

1
2
// Constants
const name string = "eden"
1
2
3
4
5
6
7
8
// Variables
func main() {
var name string = "eden"

// 변수를 아래와 같이 축약형으로 사용 가능
// 축약형은 함수 안에서만 동작
name := "eden"
}

For 문

1
2
3
4
people := [2]string{"eden", "haeun"}
for _, person := range people {
fmt.Println(person);
}

함수

1
2
3
4
5
6
7
8
9
10
11
12
13
14
// naked return
func lenAndUpper(name string) (length int, uppercase string) {
// 'derfer' function이 끝난 후에 실행되는 코드
defer fmt.Println("I'm done")

length = len(name)
uppercase = strings.ToUpper(name)
return
}

// Go가 내부적으로 호출하는 method를 사용하는 방법
func (a Account) String() string {
return fmt.Sprint(a.Owner(), "'s account.\nHas: ", a.Balance())
}

배열 선언

1
2
3
func main() {
data := [2]string{"test1", "test2"}
}

Map 사용

1
2
3
4
5
6
7
8
// empty map을 초기화하고 싶을때
// map 끝에 중괄호({})를 작성하여 초기화 해야 함
var results = map[string]string{}

// 또는 make 사용
var results = make(map[string]string)

results["hello"] = "Hello"

Goroutines

  • Goroutines 이란 기본적으로 다른 함수와 동시에 실행시키는 함수입니다.
  • Goroutines는 프로그램이 작동하는 동안(메인함수가 실행하는 동안)만 유효합니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// 함수 앞에 go를 붙입니다.
func main() {
go count()
count()
}

func count() {
for i := 0; i < 10; i++ {
fmt.Println(i)
time.Sleep(time.Second)
}
}

// 이 경우는 main함수가 바로 종료되기 때문에 동작하지 않습니다.
func main() {
go count()
go count()
}

Channels

  • Channel 은 Goroutines 이랑 메인함수 사이에 정보를 전달하기 위한 방법입니다.
  • 채널로부터 뭔가를 받을 때 메인 함수가 어떤 결과가 올 때까지 기다립니다.
  • 채널의 타입은 chan 입니다.
  • 채널은 데이터를 받을 순 없고 보낼 수만 있도록 작성할 수 있습니다.(send-only)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
func main() {
c := make(chan bool)
go channelTest(c)
result := <- c
fmt.Println(result)
}

func channelTest(c chan bool) {
time.Sleep(time.Second * 5)
c <- true
}

// send-only
func sendOnlyTest(c chan<- bool) {
c <- true
}

Error

  • errors.New()를 사용하여 에러를 정의하고 호출합니다.
1
2
3
4
5
6
7
8
9
var err = errors.New("error content")

func main() {
fmt.PrintLn(errTest())
}

func errTest() error {
return err
}

goquery

HTML을 navigate하고 필요한 걸 HTML에서 찾아내기 위해서 사용 JQuery와 유사한 go를 위한 라이브러리입니다.

1
$ go get github.com/PuerkitoBio/goquery

참고

Share