Почему бы не функции fini () для пакета golang? - PullRequest
0 голосов
/ 29 апреля 2020

Есть встроенная функция init () для инициализации пакета. Почему не Фини для уничтожения? Например, я инициализирую пул подпрограмм внутри своего пакета и хочу, чтобы все подпрограммы в пуле завершили sh свою задачу перед выходом, вместо того, чтобы принудительно завершать работу при выходе всей программы.

Если есть финал функция. Я могу использовать syn c .Wait там для достижения своей цели.

Еще одна заслуга встроенного init - это то, что он может и может вызываться только один раз, и это будет моей собственной проблемой, если я использую user- определить функции в качестве альтернативы для них.

Ответы [ 2 ]

1 голос
/ 29 апреля 2020

Попробуйте следующий код:

package main

import (
    "fmt"
    "sync"
    "time"
)

func main() {
    defer fini()

    wg.Add(1)
    go routine()
    fmt.Println("... in progress ... ")
}
func fini() {
    wg.Wait()
    fmt.Println("Done")
}
func init() {
    fmt.Println("Hi")
}
func routine() {
    fmt.Println("Doing somthing ...")
    time.Sleep(1000 * time.Millisecond)
    wg.Done()
}

var wg sync.WaitGroup

Выполнить:

$ go run .
Hi
... in progress ...
Doing somthing ...
Done
0 голосов
/ 30 апреля 2020

Выполнение финиша в функции main может решить мою проблему

...