중첩 된 구조체 초기화
중첩 된 구조체를 초기화하는 방법을 알 수 없습니다. 여기에서 예를 찾으십시오. http://play.golang.org/p/NL6VXdHrjh
package main
type Configuration struct {
Val string
Proxy struct {
Address string
Port string
}
}
func main() {
c := &Configuration{
Val: "test",
Proxy: {
Address: "addr",
Port: "80",
},
}
}
글쎄, Proxy를 자체 구조체로 만들지 않는 특별한 이유가 있습니까?
어쨌든 두 가지 옵션이 있습니다.
적절한 방법은 프록시를 자체 구조체로 이동하는 것입니다. 예를 들면 다음과 같습니다.
type Configuration struct {
Val string
Proxy
}
type Proxy struct {
Address string
Port string
}
func main() {
c := &Configuration{
Val: "test",
Proxy: Proxy{
Address: "addr",
Port: "port",
},
}
fmt.Println(c)
}
덜 적절하고 추악한 방법이지만 여전히 작동합니다.
c := &Configuration{
Val: "test",
Proxy: struct {
Address string
Port string
}{
Address: "addr",
Port: "80",
},
}
중첩 된 구조체에 대해 별도의 구조체 정의를 사용하고 싶지 않고 @OneOfOne이 제안한 두 번째 방법이 마음에 들지 않으면이 세 번째 방법을 사용할 수 있습니다.
package main
import "fmt"
type Configuration struct {
Val string
Proxy struct {
Address string
Port string
}
}
func main() {
c := &Configuration{
Val: "test",
}
c.Proxy.Address = `127.0.0.1`
c.Proxy.Port = `8080`
}
여기에서 확인할 수 있습니다 : https://play.golang.org/p/WoSYCxzCF2
다음 과 같이 Proxy
외부에서 구조체를 별도로 정의하십시오 Configuration
.
type Proxy struct {
Address string
Port string
}
type Configuration struct {
Val string
P Proxy
}
c := &Configuration{
Val: "test",
P: Proxy{
Address: "addr",
Port: "80",
},
}
http://play.golang.org/p/7PELCVsQIc 참조
이 옵션도 있습니다.
type Configuration struct {
Val string
Proxy
}
type Proxy struct {
Address string
Port string
}
func main() {
c := &Configuration{"test", Proxy{"addr", "port"}}
fmt.Println(c)
}
One gotcha arises when you want to instantiate a public type defined in an external package and that type embeds other types that are private.
Example:
package animals
type otherProps{
Name string
Width int
}
type Duck{
Weight int
otherProps
}
How do you instantiate a Duck
in your own program? Here's the best I could come up with:
package main
import "github.com/someone/animals"
func main(){
var duck animals.Duck
// Can't instantiate a duck with something.Duck{Weight: 2, Name: "Henry"} because `Name` is part of the private type `otherProps`
duck.Weight = 2
duck.Width = 30
duck.Name = "Henry"
}
You also could allocate using new
and initialize all fields by hand
package main
type Configuration struct {
Val string
Proxy struct {
Address string
Port string
}
}
func main() {
c := new(Configuration)
c.Val = "test"
c.Proxy.Address = "addr"
c.Proxy.Port = "80"
}
See in playground: https://play.golang.org/p/sFH_-HawO_M
You can define a struct and create its object in another struct like i have done below:
package main
import "fmt"
type Address struct {
streetNumber int
streetName string
zipCode int
}
type Person struct {
name string
age int
address Address
}
func main() {
var p Person
p.name = "Vipin"
p.age = 30
p.address = Address{
streetName: "Krishna Pura",
streetNumber: 14,
zipCode: 475110,
}
fmt.Println("Name: ", p.name)
fmt.Println("Age: ", p.age)
fmt.Println("StreetName: ", p.address.streetName)
fmt.Println("StreeNumber: ", p.address.streetNumber)
}
Hope it helped you :)
You need to redefine the unnamed struct during &Configuration{}
package main
import "fmt"
type Configuration struct {
Val string
Proxy struct {
Address string
Port string
}
}
func main() {
c := &Configuration{
Val: "test",
Proxy: struct {
Address string
Port string
}{
Address: "127.0.0.1",
Port: "8080",
},
}
fmt.Println(c)
}
https://play.golang.org/p/Fv5QYylFGAY
참고URL : https://stackoverflow.com/questions/24809235/initialize-a-nested-struct
'Programing' 카테고리의 다른 글
JUnit을 사용하여 환경 변수에 의존하는 코드를 테스트하는 방법은 무엇입니까? (0) | 2020.08.13 |
---|---|
콘솔에서 시스템 쉘을 실행하기위한 Eclipse 플러그인이 있습니까? (0) | 2020.08.13 |
Java에서 동적 다형성과 정적 다형성의 차이점은 무엇입니까? (0) | 2020.08.13 |
Ruby에서 파일 이름 및 확장자 가져 오기 (0) | 2020.08.13 |
localhost 외부에서 액세스를 허용하는 방법 (0) | 2020.08.13 |