как правильно реализовывать выгрузку товаров в приложение?Если вам выставляют требования по выгрузке, то правильно - следовать этим требованиям. Иначе любая выгрузка по умолчанию является правильной.
Где правильно хранить json, какие языки использовать?Снова таки, если от вас требуют хранить данные в определенном месте и использовать определенный язык, то правильным будет - следовать этим требованиям. Иначе храните как вам удобно и используйте те языки, которые знаете.
zipMaker()
успевает обработать все данные: функция main
завершается сразу после того, как завершается выполнение цикла.func main() {
// your code
locker := make(chan struct{})
<-locker
}
httpGet()
и parser()
в горутинах. Лучше возвращать []Gallery
, после чего проходиться по нему и вызывать горутину для каждого элемента. При этом нужно воспользоваться sync.WaitGroup
. Код будет выглядеть примерно так:package main
import (
"log"
"sync"
"time"
)
// Для удобства
type Gallery int
func main() {
// То, что должна вернуть функция parser()
results := []Gallery{5, 6, 7, 8}
var wg sync.WaitGroup
for _, r := range results {
wg.Add(1)
go zipMaker(r, &wg)
}
log.Println("Wait")
// Ждём выполнения горутин
wg.Wait()
// "Done" напечатается через 2 секунды после "Wait"
log.Println("Done")
}
func zipMaker(g Gallery, wg *sync.WaitGroup) {
defer wg.Done()
// your code
time.Sleep(time.Second * 2)
}
sync.WaitGroup
позволяет ждать обработки всех данных. Подробнее можно почитать тут. func redirectStderr(f *os.File) {
err := syscall.Dup2(int(f.Fd()), int(os.Stderr.Fd()))
if err != nil {
log.Fatalf("Failed to redirect stderr to file: %v", err)
}
}
redirectStderr(os.Stdout)
package main
import (
"encoding/xml"
"fmt"
)
type Property struct {
Name string `xml:"name,attr"`
Value string `xml:",chardata"`
}
type Object struct {
Properties []Property `xml:"PROPERTY"`
Basetype string `xml:"basetype,attr"`
Name string `xml:"name,attr"`
Oid int `xml:"oid,attr"`
}
type Response struct {
XMLName xml.Name `xml:"RESPONSE"`
Objects []Object `xml:"OBJECT"`
}
func main() {
data := []byte(`<RESPONSE>
<OBJECT basetype="status" name="status" oid="1">
<PROPERTY name="response-type">success</PROPERTY>
<PROPERTY name="response-type-numeric">0</PROPERTY>
<PROPERTY name="response">0f738648db95bb1f6ca37f6b8b5aafa8</PROPERTY>
<PROPERTY name="return-code">1</PROPERTY>
</OBJECT>
</RESPONSE>`)
var res Response
err := xml.Unmarshal(data, &res)
if err != nil {
panic(err)
}
fmt.Printf("%+v\n", res)
}
out, _ := exec.Command("ping", "192.168.0.111", "-c 5", "-i 3", "-w 10").Output()
if strings.Contains(string(out), "Destination Host Unreachable") {
fmt.Println("TANGO DOWN")
} else {
fmt.Println("IT'S ALIVEEE")
}