Go에는 템플릿이나 함수 오버로딩이 부족함에도 불구하고 가변 함수에 대한 일반 프로그래밍을 어느 정도 달성하는 것이 가능합니다.
다음 중복 코드 조각을 고려하세요.
<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 }</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>
그런 다음 이 일반 함수를 유형과 함께 사용할 수 있습니다. 클라이언트 코드의 어설션:
<code class="go">value := document.Get("index", 1).(int) // Panics if the value is not an int</code>
또는
<code class="go">value, ok := document.Get("index", 1).(int) // `ok` is false if the value is not an int</code>
그러나 이 접근 방식은 런타임 오버헤드를 발생시킵니다. 어떤 경우에는 별도의 기능을 유지하고 코드를 재구성하는 것이 더 효율적일 수 있습니다.
위 내용은 Go에서 가변 함수를 사용하여 일반 프로그래밍을 어떻게 달성할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!