정의: 집계 데이터 유형으로, 모든 유형의 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!