golang 구조체를 포함 된 템플릿으로 초기화하려고합니다. 템플릿에는 필드가 없기 때문에, 당신이 혼란하고 내가 생성자에 변수의 정확한 수를 할당하는 작업 것이라고 기대하지만, 대신 컴파일러는golang은 템플릿을 내장하여 구조체를 초기화합니다. 구조체 초기화 프로그램에서 값이 너무 적음
main.go:17:19: too few values in struct initializer
package main
import "fmt"
type TestTemplate interface {
Name() string
}
type TestBase struct {
name string
TestTemplate
}
func New(name string) *TestBase {
return &TestBase{name} // This fails
//return &TestBase{name: name} // This works
}
func (v *TestBase) Name() string {
return v.name
}
func main() {
fmt.Println(New("Hello"))
}
아를, 나는()가 아니라 인쇄에 비해() 이름을 가지고 템플릿을 정의하는 것을 의미하지만,이 문제에 너무 관련이없는입니다. 고맙습니다. 템플릿이 필드가 아니며이 객체가 이러한 기능을 구현해야한다는 것을 컴파일러에게 알려주었습니다. – Spellchaser
전통적인 OOP 개념을 Go에 맞추려고 할 때주의하십시오. Go 언어는이를 위해 빌드되지 않았습니다.Embedding은'Print/Name' 메쏘드가'TestBase'로부터 직접적으로 * 접근 할 수 있다는 것을 컴파일러에게 알려주지 만, 포함 된 필드와 그것의 메쏘드는 그것들이 속한 타입에 대한 지식이 없습니다 ,'Name/Print' 메쏘드는'TestBase.name' 필드에 접근 할 수 없습니다. – mkopriva