Go의 일반 Variadic 인수
Go에는 템플릿과 오버로드된 기능이 부족하지만 Variadic에서 일반 프로그래밍과 유사한 솔루션을 제공합니다. 기능.
도전 과제:
유사한 구조를 가진 다양한 기능:
<code class="go">func (this Document) GetString(name string, defaults ...string) string { v, ok := this.GetValueFromDb(name) if !ok { if len(defaults) >= 1 { return defaults[0] } else { return "" } } return v.asString } func (this Document) GetInt(name string, defaults ...int) int { v, ok := this.GetValueFromDb(name) if !ok { if len(defaults) >= 1 { return defaults[0] } else { return 0 } } return v.asInt } // etc. for various types</code>
해결책:
인터페이스{} 유형을 활용하면 일반 함수가 활성화됩니다.
<code class="go">func (this Document) Get(name string, defaults ...interface{}) interface{} { v, ok := this.GetValueFromDb(name) if !ok { if len(defaults) >= 1 { return defaults[0] } else { return nil } } return v }</code>
GetValueFromDb 함수는 인터페이스{}도 반환해야 합니다. 클라이언트 코드에서는 유형 어설션을 사용하여 값을 변환하고 얻을 수 있습니다.
<code class="go">value := document.Get("index", 1).(int) // Panics if the value is not an int</code>
or
<code class="go">value, ok := document.Get("index", 1).(int) // ok is false if the value is not an int</code>
이로 인해 런타임 오버헤드가 발생하기는 하지만 코드를 재구성하고 함수를 분리하는 것이 더 효율적일 수 있습니다. .
위 내용은 Go가 템플릿 없이 일반 Variadic 기능을 어떻게 달성할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!