func Copy(src io.Reader, dst io.Writer) error { //... } import gocopy s := file.Open() err := gocopy.Copy(s, d) func Copy(src io.Reader, dst io.Writer) (statusCh, error) { //... go func() { statusCh }() } func Read() { select { case status := <-statusCh: } } type Stat struct { status string err error } func Copy(src io.Reader, dst io.Writer) chan Stat { //... statusCh := make(chan Stat{}) go func() { statusCh{ } } return statusCh } func Read() { select { case status := <-statusCh: } } import gocopy s := file.Open() err := gocopy.Copy(s, d) func Copy(src io.Reader, dst io.Writer) chan Stat { //... statusCh := make(chan Stat{}) buf := make([]byte, 1024) var total int64 go func() { for { n, err := src.Read(buf) if n > 0 { writen, err := dst.Write(buf[:n]) total += int64(writen) if err != nil { statusCh <- Stat{ status: "done with err", err: err, } return } } if err == io.EOF { statusCh <- Stat{ bCopy: total, status: "done", err: nil, } return } if err != nil { statusCh <- Stat{ status: "done with err", err: err, } return } } } return statusCh } func Read() { select { case status := <-statusCh: if status.err != nil { return } } } func Copy(src io.Reader, dst io.Writer) chan Stat { //... statusCh := make(chan Stat{}) buf := make([]byte, 1024) var total int64 go func() { for { select { case : n, err := src.Read(buf) if n > 0 { writen, err := dst.Write(buf[:n]) total += int64(writen) if err != nil { statusCh <- Stat{ status: "done with err", err: err, } return } } if err == io.EOF { statusCh <- Stat{ bCopy: total, status: "done", err: nil, } return } if err != nil { statusCh <- Stat{ status: "done with err", err: err, } return } default: statusCh <- Stat{ bCopy: total, status: "pending", err: nil, } } } } return statusCh } func Read() { select { case status := <-statusCh: if status.err != nil { return } } }
Golang
Mida otsid tööl, millega soovid tegeleda?
On olemas funktsioon `unpredictableFunc()`, mida tuleb ümber pakkida nii, et see töötaks ajapiiranguga (näiteks 1 sekund) ja logiks selle täitmise aja. // On olemas funktsioon, mis töötab lõpmatult ja tagastab numbri. // Selle keha ei tohi muuta (kaalume, et sees on võrgupäring). func unpredictableFunc() int64 { rnd := rand.Int63n(5000) time.Sleep(time.Duration(rnd) * time.Millisecond) return rnd } // Tuleb muuta ümbrise funktsioon, mis töötab määratud ajapiiranguga (näiteks 1 sekund). // Kui "pikk" funktsioon lõpeb selle aja jooksul, on see suurepärane, tagastame tulemuse. // Kui mitte, tagastame vea. Selle töö tulemus meid sel juhul ei huvita. // // Lisaks tuleb mõõta, kui kaua see funktsioon töötas (lihtsalt logi välja). // Ümbrise funktsiooni signatuur võib olla muudetud. func predictableFunc() int64 { return unpredictableFunc() }
Millises meeskonnas sa töötasid pangas? Mis oli meeskonna ülesandeks?
Kuidas töötab SSL/TLS? Kirjeldage ühenduse loomise protsessi.
Kuidas on mapid Go-s üles ehitatud?
Mis on slice Go keeles?
Kas sa kirjutasid operaatoreid Kubernetesile?
Kuidas töötab context.WithTimeout sisemiselt?
Mis on tehingute isolatsiooni tasemed? Milliseid kasutasite?
Kuidas kontrollida CPU ja mälu koormust Linuxis?
Mis kodas parodys? package main import "fmt" func main() { nums := make([]int, 1, 2) fmt.Println(nums) // appendSlice(nums, 1024) fmt.Println(nums) // mutateSlice(nums, 1, 512) fmt.Println(nums) // } func appendSlice(sl []int, val int) { sl = append(sl, val) } func mutateSlice(sl []int, idx, val int) { sl[idx] = val }
**Tingimus** Päringud mitmele URL-ile peaks toimuma paralleelselt. Kuvage HTTP-olekud, käsitlege vigu. ```go package main func main() { urls := []string{"[link]"} // Tee midagi } ```
Kas on kaalutud andmete jagamist kuumadeks (viimased 3 kuud) ja külmadeks, et vähendada koormust Elasticsearchi asemel?
Kuidas erinevad goroutines operatsioonisüsteemi niitidest? Milleks need on vajalikud?
Kuidas leida PostgreSQLis aeglane päring ja kuidas seda optimeerida?
Räägi mulle resp.Body.Close() kohta — miks see vajalik on ja miks sa panid 10-puhvri?
Kuidas sa eristad Junior, Middle ja Senior arendajad? Milliste kriteeriumide alusel sa pead end Senioriks?
Kui palju ridu oli andmebaasis?
Mis on indeksid andmebaasides? Millised on indeksite tüübid?