//閉包 保護了n 變量不會每次初始化; func testClosure() func(int) int { var n int = 10 return func(x int) int { n = x + n return n } } func makeSuffix(suffix string) func (name string) string { return func(name string) string { if strings.HasSuffix(name, suffix) { return name; } return name + suffix } } f := testClosure() fmt.Println(f(1)) //11 fmt.Println(f(2)) //13 f2 := makeSuffix(".jpg") fmt.Println(f2("test")) //test.jpg fmt.Println(f2("a.jpg")) //a.jpg