처음부터 시작 - 구조체
8756 단어 goprogrammingtutorialbeginners
처음부터 시작 - 구조체
간단한 시나리오부터 시작하겠습니다. 계정 잔액이 있습니다. 다음과 같이 변수에 저장할 수 있습니다.
accountBalance int32
이제 훌륭합니다. 하지만 은행 계좌와 같이 좀 더 복잡한 것을 설명하고 싶다면? 은행 계좌는 ID, 잔액, 계좌 소유자 등과 같은 더 많은 정보로 구성됩니다. 다음과 같이 각 속성을 정수로 나타낼 수 있습니다.
var accountBalance int32
var owner string
var id int
그러나 하나 이상의 은행 계좌를 운영해야 하는 경우 어떻게 됩니까? 즉, 다음과 같이 저장할 수 있습니다.
var accountBalance int32
var owner string
var id int
var accountBalance2 int32
var owner2 string
var id2 int
실제로 확장되지는 않지만 필요한 것은 이 모든 정보를 다음과 같이 그룹화할 수 있는 struct
와 같은 더 복잡한 유형입니다.
type Account struct {
accountBalance int32
owner string
id int
}
참고문헌
https://www.golangprograms.com/go-language/struct.html
구조체 정의
좋습니다. 관련 정보를 수집하기 위해 구조체가 필요한 이유를 이해하고 지금까지 한 가지 예를 보았습니다Account
. 하지만 부분을 나누어서 구조체를 정의하는 방법을 살펴보겠습니다. 구문은 다음과 같습니다.
type <a name for the struct> struct {
... fields
}
다른 예를 보여드리지만 이번에는 주소에 대한 구조체를 만듭니다.
type Address struct {
city string
street string
postal string
}
구조체 인스턴스 만들기
구조체에서 인스턴스를 만들려면 다음 두 가지 방법 중 하나를 사용할 수 있습니다.
accountBalance int32
var accountBalance int32
var owner string
var id int
var accountBalance int32
var owner string
var id int
var accountBalance2 int32
var owner2 string
var id2 int
type Account struct {
accountBalance int32
owner string
id int
}
type <a name for the struct> struct {
... fields
}
type Address struct {
city string
street string
postal string
}
변수를 정의하고 변수 선언 후 필드를 설정합니다.
var address Address
address.city = "London"
address.street = "Buckingham palace"
address.postal = "SW1"
한 번에 모두 정의하면 모든 값을 한 번에 설정할 수도 있습니다.
address2 := Address{"New York", "Central park", "111"}
구조체 포함
구조체를 다른 구조체에 포함할 수도 있습니다.
Address
구조체가 있고 주소는 Person
와 같은 상위 수준 구조체에서 사용할 수 있는 것입니다. 그 방법은 다음과 같습니다.type Person struct {
name string
address Address
}
이 코드에서
Person
구조체에는 address
유형의 Address
필드가 있습니다.이 구조체를 인스턴스화하기 위해 다음과 같이 입력할 수 있습니다.
person := Person{
name: "chris",
address: Address{
city: "Stockholm",
},
}
기본 명명에 의존
필드
address
를 생성한 방법에 유의하십시오. 대신 다음과 같이 정의하여 몇 문자 입력을 건너뛸 수 있습니다.type Employee struct {
Address
company string
}
필드 이름을 생략하고
Address
를 입력하면 필드 이름과 필드 유형이 같은 이름이 됩니다. 여기에서 인스턴스를 생성하는 것은 매우 유사합니다.employee := Employee{
Address: Address{
city: "LA",
},
company: "Microsoft",
}
구조체에 구현 추가
구조체는 본질적으로 복잡한 것을 설명하는 데이터 필드입니다. 구조체에서 작동하는 함수를 만들어 동작을 추가할 수 있습니다. 예를 들면 다음과 같습니다.
func (a Address) string() string {
return fmt.Sprintf("City: %s, Street: %s, Postal address: %s", a.city, a.street, a.postal)
}
string()
메서드를 추가했습니다. 메서드는 Address
에 속하며 (...)
를 취하는 func
키워드 바로 뒤에 a Address
가 있음을 알 수 있습니다. 나머지 구현은 Sprintf()
를 통해 형식이 지정된 문자열을 반환합니다. 다음 코드가 주어집니다.var address Address
address.city = "London"
address.street = "Buckingham palace"
address.postal = "SW1"
fmt.Println(address.string())
string()
를 호출하면 다음과 같은 결과가 표시됩니다.City: London, Street: Buckingham palace, Postal address: SW1
요약
이 문서에서는 복잡한 것을 설명하는 많은 속성이 있을 때 필드를 구조체로 그룹화해야 하는 이유를 배웠습니다. 이러한 경우에 구조체를 사용하기를 바랍니다.
Reference
이 문제에 관하여(처음부터 시작 - 구조체), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/azure/go-from-the-beginning-structs-1k8c텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)