func SaySomething(i string = "Hello")(string){
...
}
아니, 일부 다른 옵션을 수축됐는데 구현하십시오 기본값입니다. 몇 가지 [좋은 블로그 포스트] (http://joneisen.me/development/code/2013/06/23/golang-and-default-values.html) 이 문제에 관한 몇 가지 있지만 구체적인 예를 들어.
< br>;
// Both parameters are optional, use empty string for default value
func Concat1(a string, b int) string {
if a == "" {
a = "default-a"
}
if b == 0 {
b = 5
}
return fmt.Sprintf("%s%d", a, b)
}
< br>;
// a is required, b is optional.
// Only the first value in b_optional will be used.
func Concat2(a string, b_optional ...int) string {
b := 5
if len(b_optional) > 0 {
b = b_optional[0]
}
return fmt.Sprintf("%s%d", a, b)
}
< br>;
// A declarative default value syntax
// Empty values will be replaced with defaults
type Parameters struct {
A string `default:"default-a"` // this only works with strings
B string // default is 5
}
func Concat3(prm Parameters) string {
typ := reflect.TypeOf(prm)
if prm.A == "" {
f, _ := typ.FieldByName("A")
prm.A = f.Tag.Get("default")
}
if prm.B == 0 {
prm.B = 5
}
return fmt.Sprintf("%s%d", prm.A, prm.B)
}
< br>;
func Concat4(args ...interface{}) string {
a := "default-a"
b := 5
for _, arg := range args {
switch t := arg.(type) {
case string:
a = t
case int:
b = t
default:
panic("Unknown argument")
}
}
return fmt.Sprintf("%s%d", a, b)
}
아니, 기본값을 지정할 수 있는 방법이 없습니다. 내가 믿는 가독성을 높이기 위해 이 완료되어도 고의적으로요 의 비용을 들여, 조금 더 많은 시간을 (및 잘하면, 사고) 에 writer& # 39 의 종료.
내 생각에는 이벤트수정적절한 외곽진입 갖추고 있는 " default"; 새로운 기능을 가지고 있는 것이 좀 더 일반적인 물품요 기본으로 지원한다. 코드에 대한 정확한 의도를 없기 때문에 이 됩니다. 예를 들면 다음과 같습니다.
func SaySomething(say string) {
// All the complicated bits involved in saying something
}
func SayHello() {
SaySomething("Hello")
}
I made a 수행합니까 공통 기능을 제공하는 것이 매우 큰 힘을, 일반 다시 시작된다. 예를 들어, '그냥' 이 많은 라이브러리보다는 볼 수 있습니다 다음 줄 것이라고 할 수 있는 프 t.프린틀린 자도으로 뭐라구오 펠릭스 t. 프린스 '의 코드, 그러나, 그렇지 않으면, 언제 판독값 someone& # 39 장 기능을 통해 그들이 선택해제합니다 못하며창조된 부르나. # 39, won& 기본값과 함께, 내가 모르는 어떤 일이 되어야 하는 참조입니다 기본값입니다 실제로 어떤 기능이 없이 드리고자 합니다.