초보자를 위한 Go의 까다로운 개념

Go에는 훌륭한 기능이 있지만 일부 규칙과 개념에 주의해야 합니다.

Go 동시성 이해하기



동시성은 정확히 동시에 여러 작업을 실행하는 기능이 아닙니다. 나는 공식 문서를 포함하여 모든 곳에서 그 진술을 읽었지만 이 정의는 병렬성이라는 다른 용어에 대한 것입니다.

동시 작업은 실제로 병렬로 실행될 수 있지만 주요 목표는 아닙니다. 동시성은 그렇지 않은 반면 병렬 처리에는 여러 스레드가 필요하므로 차이점이 중요합니다.

Go는 고루틴이라는 킬러 기능을 제공하지만 이러한 기능 중 많은 기능이 동일한 스레드에서 실행될 수 있으며 프로세스를 자동으로 할당하는 것은 Go Runtime입니다. 개발자는 함수 앞에 go 키워드만 작성하면 되며 channels를 사용하여 여러 고루틴이 서로 통신하도록 할 수 있습니다.

결과적으로:

Parallelism is simply running things in parallel. Concurrency is a way to structure your program



Source: divan.dev

이 Go 마법은 매우 훌륭하고 매우 저렴한 동시성 구현을 허용하지만 공짜는 없으며 차이점을 알지 못하면 예기치 않은 오류가 발생할 수 있습니다.

캡슐화 이동



다른 많은 프로그래밍 언어와 달리 코드를 캡슐화하는 공개 또는 비공개 키워드가 없습니다. 대신 Go는 대문자 및 대문자가 아닌 형식을 사용합니다.

내보내려면 데이터 구조의 이름을 대문자로 표기해야 합니다.

즉, 다른 패키지에서 구조를 호출해야 하는 경우 구조를 내보내야 합니다. 변수, 함수, 상수 및 기타 유형에 대해 동일합니다. 스크립트에서 내부적으로만 필요한 경우 대문자로 유지하지 않아도 됩니다.

그러나 다음 샘플도 이 개념을 잘못 이해하면 디버그하기가 상당히 번거로울 수 있습니다.

package main

import (
    "encoding/json"
    "fmt"
    "log"
)

type user struct {
    id    int
    name  string
    email string
}

func main() {
    data := `{
        "id": 1001,
        "name": "Hello",
        "email": "[email protected]"
    }`
    var u user
    err := json.Unmarshal([]byte(data), &u)
    if err != nil {
        log.Fatal(err)
    }
    fmt.Println(u)
}


위의 코드를 실행하면 다음이 출력됩니다.

{0  }


문제를 해결하고 데이터를 얻으려면 Struct의 필드를 내보냅니다.

type user struct {
    Id    int
    Name  string
    Email string
}

좋은 웹페이지 즐겨찾기