Весь день голову ломаю.
Я слышал, что желательно делать поля неимпортируемыми и использовать геттеры и сеттерыА где слышали?Вообще это не всегда верно, например даже стандартная библиотека для работы с csv там можно настраивать поля напрямую. В целом если у вас поля с простыми типами данных то в целом это не имеет особого смысла. Это имеет смысл если нужно работать с интерфейса или спрятать за ними часть сложной логики. Насколько я знаю эти идеи тащат люди из других языков, но паттерны которые распространены в Java или C# не всегда подходят для го поэтому не стоит все буквально воспринимать.
type User struct {
Name string
Age int
}
Подскажите как это сделатьЕсли опыт в вебе есть, то просто пройти го тур, загуглить go roadmap и гуглить/читать книги/маны по нужному направлению.
beeep.Notify
вам надо будет сохранить вшитую картинку во временный файл и передать в beeep.Notify
путь к нему. func (h *HTMLElement) ChildTextgo(querySelector string) string
func (h *HTMLElement) ChildTexts(goquerySelector string) []string
result := strings.Join(data, ",")
fmt.Println(result
cmd := exec.Command("python", "script.py")
stdoutBuf := bytes.NewBuffer(nil)
cmd.Stdout = stdoutBuf
if err := cmd.Run(); err != nil {
log.Println(err.Error())
}
fmt.Println(stdoutBuf.String())
cmd := exec.Command("python", "script.py")
res, err := cmd.CombinedOutput()
if err != nil {
log.Fatal(err)
}
fmt.Println(string(res))
package main
import (
"bufio"
"fmt"
"os"
"sync"
)
func main() {
urls := make(chan string)
go fillChannel(urls)
// создаем группу для ожидания, того, что все воркеры завершены
wg := &sync.WaitGroup{}
for i := 0; i < 5; i++ {
// при запуске каждого воркера, увеличиваем счетчик в группе на 1
wg.Add(1)
go requestWorker(urls, wg)
}
// ждем, пока счетчик в группе не будет равен 0
wg.Wait()
}
func requestWorker(channel <-chan string, wg *sync.WaitGroup) {
// По завершении воркера счетчик в группе будет уменьшен на 1
defer wg.Done()
// Заодно пишем сообщение о завершении воркера
defer println("Worker stopped")
// Постоянно читаем из канала новые сообщения
// цикл автоматически завершится, когда канал закроется и буфер будет пуст
for url := range channel {
println(url)
}
}
func fillChannel(channel chan<- string) {
file, err := os.Open("data.txt")
defer file.Close()
if err != nil {
fmt.Println(err)
return
}
fileScanner := bufio.NewScanner(file)
fileScanner.Split(bufio.ScanLines)
for fileScanner.Scan() {
channel <- fileScanner.Text()
}
// закрываем канал, когда данные кончились
// в го принято, чтобы канал закрывал только тот, кто в него пишет
close(channel)
}