English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Golang 기본 강의

Golang 제어문

Golang 함수 & 메서드

Golang 구조체

Golang 슬라이스 & 배열

Golang 문자열(String)

Golang 포인터

Golang 인터페이스

Golang 동기

Golang 예외(Error)

Golang 다른 항목

Go 언어 구조체(struct)

Golang의 구조(struct)는 사용자 정의 타입으로, 다른 타입의 항목을 그룹화할 수 있도록 허용합니다/단일 타입으로 조합됩니다. 현실 세계에서 특정 속성을 가진/필드의 실체는 모두 구조로 표현될 수 있습니다. 이 개념은 일반적으로 object-oriented programming에서의 클래스와 비교됩니다. 이는 상속을 지원하지 않지만 조합을 지원하는 가벼운 클래스라고 불릴 수 있습니다.

예를 들어, 주소는 name, street, city, state, Pincode를 가집니다. 다음과 같이 이 세 속성을 구조로组合하면 됩니다주소의미가 있습니다.

구조를 선언합니다:

 type Address struct {
      name string 
      street string
      city string
      state string
      Pincode int
}

그 위에type키워드는 새로운 타입을 도입합니다. 그 뒤에는 타입의 이름이 있습니다(주소)과 키워드struct우리가 정의하고 있는 구조를 설명하기 위해입니다. 이 구조는 괄호 안에 있는 각 필드의 목록을 포함하고 있습니다. 각 필드는 이름과 타입을 가집니다.

주의:같은 타입의 필드를 조합하여 더 단축된 형태로 만들 수 있습니다. 예를 들어:

type Address struct {
    이름, street, city, state string
    Pincode int
}

구조 정의:구조 선언 문법:

var a Address

위의 코드는Address 형태의 변수를 사용할 수 있습니다. 기본적으로 이는 모든 필드가 초기 값으로 설정됩니다. 따라서 필드 name, street, city, state는 ""로 설정되고, Pincode는 0으로 설정됩니다.

이렇게 하면구조형태를 초기화하는 구조 텍스트로 변수를 초기화합니다아래와 같이:

var a = Address{"Akshay", "PremNagar", "Dehradun", "Uttarakhand", 252636}

주의:

필드를 구조 내에서 선언된 순서대로 전달해야 합니다. 또한, 위의 문법을 사용하여 필드의 일부만 초기화할 수 없습니다.

Go는이름: 값구조를 초기화하는 용어, 필드 순서는 중요하지 않습니다. 그리고 이는 필드의 일부만 초기화할 수 있습니다. 모든 미 초기화된 필드는 해당 필드의 초기 값으로 설정됩니다.

예를 들어:

var a = Address{"Akshay", "PremNagar", "Dehradun", "Uttarakhand", 252636}
package main 
  
import "fmt"
  
//구조형태 정의
type Address struct { 
    Name    string 
    city    string 
    Pincode int
} 
  
func main() { 
  
        //struct 타입의 변수를 선언
        //모든 struct 필드를 초기화
        //초기 값
    var a Address  
    fmt.Println(a) 
  
        //선언 및 초기화
        // struct를 구조 텍스트로 사용
    a1 := Address{"Akshay", "Dehradun", 3623572} 
  
    fmt.Println("주소1: ", a1) 
  
        //필드 이름을 지정할 때
        //구조를 초기화하려면
    a2 := Address{Name: "Anikaa", city: "Ballia",Pincode: 277001} 
  
    fmt.Println("주소2: ", a2) 
  
        //미 초기화된 필드는
        //들어간 값
    a3 := Address{Name: "Delhi"} 
    fmt.Println("주소3: ", a3) 
}

출력:

{  0}
주소1:  {Akshay Dehradun 3623572}
주소2:  {Anikaa Ballia 277001}
주소3:  {Delhi  0}

구조의 필드를 어떻게 접근할 수 있습니까?

접근하려면구조의각 필드를 접근하려면(.)연산자.

package main 
  
import "fmt"
  
//구조체 정의 
type Car struct { 
    이름, 모델, 색상 string 
    WeightInKg         float64 
} 
  
func main() { 
    c := Car{Name: "Ferrari", Model: "GTC4", Color: "Red", WeightInKg: 1920} 
  
        //구조 필드 접근
        //점표기자를 사용하여
    fmt.Println("Car Name: ", c.Name) 
    fmt.Println("Car Color: ", c.Color) 
        //새 값 할당
        //구조체 필드를 가리키기
    c.Color = "Black"
      
    //결과 출력
    fmt.Println("Car: ", c) 
}

출력:

Car Name:  Ferrari
Car Color:  Red
Car:  {Ferrari GTC4 Black 1920}

구조를 가리키는 포인터

Golang의 포인터는 다른 변수의 메모리 주소를 저장하는 변수입니다. 다음 예제와 같이 구조를 가리키는 포인터를 생성할 수 있습니다:

// 구조체를 가리키는 포인터
package main 
  
import "fmt"
  
// 구조 정의
type Employee struct { 
    firstName, lastName string 
    age, salary int
} 
  
func main() { 
  
        //struct 변수의 주소를 전달
        // emp8
    emp8 := &Employee{"Sam", "Anderson", 55, 6000} 
  
        //* emp8,
        // emp8구조의 firstName 필드
    fmt.Println("First Name:", (*emp8).firstName) 
    fmt.Println("Age:", (*emp8).age) 
}

출력:

First Name: Sam
Age: 55

Golang은 emp8* emp8,

//구조를 가리키는 포인터
package main 
  
import "fmt"
  
//구조 정의
type Employee struct { 
    firstName, lastName string 
    age, salary         int
} 
  
func main() { 
  
    //구조체를 가리키는 포인터를 가져오기
    emp8 := &Employee{"Sam", "Anderson", 55, 6000} 
  
        // emp8.firstName를 사용하여 접근
        //firstName 필드
    fmt.Println("First Name: ", emp8.firstName) 
    fmt.Println("Age: ", emp8.age) 
}

출력:

First Name:  Sam
Age:  55