Можно ли поставить defer
в подфункцию?Go, можно ли отложить в sub func
Т.е., для линии 12 ~ 16 из FUNC test1()
в https://play.golang.org/p/evabhcjvNs (прилагается ниже)
Есть ли возможность поместить их в суб функции? Как и то, что я пробовал в test2()
(но это поведение отличается от test1()
).
Причина, почему я спрашиваю, что, по линии 12 ~ 16 из FUNC test1()
, мой фактический код, чтобы восстановить переменную из постоянных данных, а затем использовать defer
, чтобы сохранить его, когда test1()
делается. Однако есть случаи, когда все восстановление/сохранение не требуется, поэтому я думаю, что лучше контролировать его.
благодаря
package main
import "log"
func main() {
test1()
log.Printf("==== \n")
test2()
}
func test1() {
r, err := Open("a")
if err != nil {
log.Fatalf("error opening 'a'\n")
}
defer r.Close()
r.Use()
}
func test2() {
r := subc()
r.Use()
}
func subc() *Resource {
r, err := Open("a")
if err != nil {
log.Fatalf("error opening 'a'\n")
}
defer r.Close()
return r
}
type Resource struct {
name string
}
func Open(name string) (*Resource, error) {
log.Printf("opening %s\n", name)
return &Resource{name}, nil
}
func (r *Resource) Use() error {
log.Printf("using %s\n", r.name)
return nil
}
func (r *Resource) Close() error {
log.Printf("closing %s\n", r.name)
return nil
}