>  기사  >  백엔드 개발  >  Go 언어 구조에 대한 자세한 설명

Go 언어 구조에 대한 자세한 설명

尚
앞으로
2019-11-29 15:36:252716검색

Go 언어 구조에 대한 자세한 설명

정의: 집계 데이터 유형으로, 모든 유형의 0개 이상의 값에서 집계된 엔터티입니다.

멤버: 각 값을 구조의 멤버라고 합니다.

예:

회사의 직원 정보를 처리하려면 일반적인 구조 사례를 사용하세요. 각 직원 정보에는 고유한 직원 번호, 직원 이름, 집 주소, 생년월일, 직위, 급여, 상사 등이 포함됩니다. 이 모든 정보는 전체 단위로 복사되거나 함수의 매개변수 또는 반환 값으로 사용되거나 배열 등에 저장될 수 있는 엔터티에 바인딩되어야 합니다.

구조 정의:

type Employee struct {
    ID        int
    Name      string
    Address   string
    DoB       time.Time
    Position  string
    Salary    int
    ManagerID int
}

변수 정의:

var dilbert Employee

액세스 멤버:

dilbert.Salary -= 5000

멤버 주소 가져오기:

position := &dilbert.Position
*position = "Senior " + *position

도트 연산자 및 구조 포인터:

var employeeOfTheMonth *Employee = &dilbert
employeeOfTheMonth.Position += " (proactive team player)"

회원 정의 순서:

보통 한 줄은 하나의 구조체 멤버에 해당하며, 멤버의 이름이 먼저 오고 유형이 맨 나중에 옵니다. 그러나 인접한 멤버 유형이 동일한 경우 이름, 주소와 마찬가지로 한 줄로 병합될 수 있습니다. 아래 멤버

type Employee struct {
    ID            int
    Name, Address string
    DoB           time.Time
    Position      string
    Salary        int
    ManagerID     int
}

멤버 명명 규칙:

구조 멤버 이름이 대문자로 시작하면 멤버가 내보내집니다. 이는 Go 언어 내보내기 규칙에 따라 결정됩니다. 구조에는 내보낸 멤버와 내보내지 않은 멤버가 모두 포함될 수 있습니다.

내보내기 의미: 다른 패키지에서 읽고 쓸 수 있습니다.

S라는 구조 유형에는 더 이상 S 유형의 멤버가 포함되지 않습니다. 집계 값은 자신을 포함할 수 없기 때문입니다. (이 제한사항은 배열에도 적용됩니다.) 그러나 S 유형의 구조에는 *S 유형의 멤버가 포함될 수 있으며, 이를 통해 연결된 목록 및 트리 구조와 같은 재귀적 데이터 구조를 만들 수 있습니다.

type tree struct {
    value       int
    left, right *tree
}

구조 액면가:

각 멤버의 값을 지정할 수 있습니다.

type Point struct{ X, Y int }
p := Point{1, 2}

위는 첫 번째 작성 방법으로, 구조체 멤버가 정의된 순서대로 각 구조체 멤버의 액면가를 지정해야 합니다. 또한 다음과 같이 할 수도 있습니다.

anim := gif.GIF{LoopCount: nframes}

는 멤버 이름과 해당 값으로 초기화됩니다. 이 구조 값 쓰기 형식에서는 멤버의 일부 또는 전부를 포함할 수 있으며, 멤버가 생략되면 기본값은 0이 됩니다. 멤버들의 이름이 제공되기 때문에 멤버 전체의 등장 순서는 중요하지 않습니다.

참고: 두 가지 다른 글쓰기 형식을 혼합할 수 없습니다.

구조 임베딩 및 익명 멤버:

type Point struct {
    X, Y int
}

type Circle struct {
    Center Point
    Radius int
}

type Wheel struct {
    Circle Circle
    Spokes int
}

각 멤버 액세스:

var w Wheel
w.Circle.Center.X = 8
w.Circle.Center.Y = 8
w.Circle.Radius = 5
w.Spokes = 20

단순화된 구조 정의:

type Circle struct {
    Point
    Radius int
}

type Wheel struct {
    Circle
    Spokes int
}

익명 임베딩 기능 덕분에 전체 경로를 제공하지 않고도 리프 속성에 직접 액세스할 수 있습니다.

var w Wheel
w.X = 8            // equivalent to w.Circle.Point.X = 8
w.Y = 8            // equivalent to w.Circle.Point.Y = 8
w.Radius = 5       // equivalent to w.Circle.Radius = 5
w.Spokes = 20

구조 리터럴은 모양 유형이 선언될 때 구조를 따라야 하므로 서로 동등한 다음 두 가지 구문만 사용할 수 있습니다.

w = Wheel{Circle{Point{8, 8}, 5}, 20}

w = Wheel{
    Circle: Circle{
        Point:  Point{X: 8, Y: 8},
        Radius: 5,
    },
    Spokes: 20, // NOTE: trailing comma necessary here (and at Radius)
}

구조 태그:

구조 선언에서 연도 및 색상 뒤의 문자열 값 members는 멤버 Tag

type Movie struct {
    Title  string
    Year   int  `json:"released"`
    Color  bool `json:"color,omitempty"`
    Actors []string
}

var movies = []Movie{
    {Title: "Casablanca", Year: 1942, Color: false,
        Actors: []string{"Humphrey Bogart", "Ingrid Bergman"}},
    {Title: "Cool Hand Luke", Year: 1967, Color: true,
        Actors: []string{"Paul Newman"}},
    {Title: "Bullitt", Year: 1968, Color: true,
        Actors: []string{"Steve McQueen", "Jacqueline Bisset"}},
    // ...
}

구조입니다. 이 데이터 구조는 특히 JSON 형식에 적합하며 둘 사이를 쉽게 변환할 수 있습니다. Go 언어의 영화와 유사한 구조인 슬라이스를 JSON으로 변환하는 과정을 마샬링이라고 합니다. 마샬링은 json.Marshal 함수를 호출하여 수행됩니다.

data, err := json.Marshal(movies)
if err != nil {
    log.Fatalf("JSON marshaling failed: %s", err)
}
fmt.Printf("%s\n", data)

Marshal 함수는 공백 들여쓰기 없이 긴 문자열을 포함하는 인코딩된 바이트 슬라이스를 반환합니다. 표시를 위해 이를 래핑합니다.

[{"Title":"Casablanca","released":1942,"Actors":["Humphrey Bogart","Ingr
id Bergman"]},{"Title":"Cool Hand Luke","released":1967,"color":true,"Ac
tors":["Paul Newman"]},{"Title":"Bullitt","released":1968,"color":true,"
Actors":["Steve McQueen","Jacqueline Bisset"]}]

여기서 이름 멤버가 인코딩되어 해제됩니다. , Color 멤버는 인코딩되어 소문자로 시작하는 색상이 됩니다. 이는 구성 멤버 태그로 인해 발생합니다. 구조체 멤버 태그는 컴파일 단계에서 멤버와 연결된 메타 정보의 문자열입니다.

Year  int  `json:"released"`
Color bool `json:"color,omitempty"`

구조체의 멤버 태그는 모든 문자열 리터럴일 수 있지만 일반적으로 공백으로 구분된 일련의 키입니다. "value" A 키-값 쌍의 순서. 값에 큰따옴표 문자가 포함되어 있으므로 멤버 태그는 일반적으로 기본 문자열 리터럴 형식으로 작성됩니다.

더 많은 바둑 지식을 알고 싶다면 go 언어 튜토리얼 칼럼을 주목해주세요.

위 내용은 Go 언어 구조에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 csdn.net에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제