
Александр
04.04.2018
08:52:47
func (c *Config) Validation() error {
if c.Var == nil {
return errors.New("required Var field")
}
if c.Var2 == nil {
return errors.New("required Var2 field")
}
}
фактически он возращается, и потом сразу в log.Fatal

Daniel
04.04.2018
08:53:34
тут сингл еррор нарисован

Александр
04.04.2018
08:53:44
(да надо было кастом сделать error, лень :))

Google

Daniel
04.04.2018
08:53:58
я пока не понял задачу

Александр
04.04.2018
08:54:12
что бы в гоувей
ибо мне в консоль надо все ошибки получить валидации
а не первую
вариант конечно с
func (c *Config) Validation() (err []error) {
if c.Var == nil {
err = append(err, errors.New("required Var field")
}
if c.Var2 == nil {
err = append(err, errors.New("required Var2 field")
}
}
но мне кажется это немного странным

Daniel
04.04.2018
08:56:53
я же спросил - что дальше с этим мультиеррором произойдет?

Александр
04.04.2018
08:58:05
можно конечно map вернуть
дабы можно проверить было "попало ли поле в ошибку"

Daniel
04.04.2018
09:01:50
в вывод log.Fatal попадет все равно только первая. нахрена возвращать остальные?

Zver
04.04.2018
09:02:36
Возвращать одну ошибку, а в нее впихнуть информацию по всем выявленным ошибкам валидации.

Google

Александр
04.04.2018
09:03:45
но все это не очень красиво

Daniel
04.04.2018
09:03:56
еще раз
ключевой вопрос (как и во всех остальных случаях) - зачем?

Александр
04.04.2018
09:04:46
в итоге в консоль должно быть распечатано:
required Var field
required Var2 field

Daniel
04.04.2018
09:04:48
если потом по этой multierror надо итерироваться - так возвращай []error

Mykyta
04.04.2018
09:04:53

Daniel
04.04.2018
09:04:59
если нет - что ты еще собираешься с ней делать

Александр
04.04.2018
09:05:43
да блин понятно
я просто думал есть какой то уже регламентированный формат
написать то я могу все что угодно
и даже работать будет
вопрос насколько это будет соотносится с концепцией языка и общепринятыми нормами ?

Zver
04.04.2018
09:07:03

Александр
04.04.2018
09:07:22
вопрос то был "как принято возвращать multierror из функции"

Daniel
04.04.2018
09:07:33
не принято

Александр
04.04.2018
09:07:33
а не "КАК вернуть multierror из функции"
не принято
ну неужели ни у кого не возникло потребности?
я склоняюсь к возразу кастомного error, может быть как @mykytanikitenko описал

Zver
04.04.2018
09:08:42

Google

Александр
04.04.2018
09:08:57
это же классика, всякие валидаторы и прочее

Alexander
04.04.2018
09:09:14
ой да все делают по-своему исходя из того, что нужно конкретно тебе, го же)
в gin например type ValidationErrors map[string]*FieldError

Александр
04.04.2018
09:10:58
это конечно хорошо...
но я бы предпочел вернуть все такие на базе error интерфейса

Daniel
04.04.2018
09:11:39
коллега, да делайте вы что хотите :)

Zver
04.04.2018
09:11:42

Александр
04.04.2018
09:12:12

Daniel
04.04.2018
09:12:14
общепринятого способа нет, потому, что это UI, все же. роботам список ошибок не интересен, они фиксов не пишут.

Vladislav
04.04.2018
09:24:35
Пытаюсь запустить Go скрипт, выдает ошибки

Daniel
04.04.2018
09:25:27
скрипт?!

Vladislav
04.04.2018
09:25:53
ну окей, программу... да, Go - компилируемый язык

Daniel
04.04.2018
09:26:23
так на этапе запуска или компиляции ошибки?

Vladislav
04.04.2018
09:26:50
хм

Olzhas
04.04.2018
09:27:54

John
04.04.2018
09:28:03


Vladislav
04.04.2018
09:28:09
:go
go run -v bot.go
command-line-arguments
# command-line-arguments
./bot.go:17:16: undefined: Config
./bot.go:56:5: undefined: start
./bot.go:58:5: undefined: refs
./bot.go:134:18: undefined: User
package main
var (
bot *tgbotapi.BotAPI
configuration Config
phrases map[int]string
db *gorm.DB
)
func main() {
initLog()
log.Print("Log successful...")
initConfig()
log.Print("Config loaded...")
initStrings()
log.Print("Init strings successful...")
initDB()
log.Print("Init DV successfull...")
}
func initConfig() {
file, err := os.Open("config.json")
if err != nil {
log.Print("ERROR: ")
log.Panic(err)
}
defer file.Close()
body, err := ioutil.ReadAll(file)
log.Print("First 10 bytes from config.json")
log.Print(body[:10])
body = bytes.TrimPrefix(body, []byte("\xef\xbb\xbf"))
log.Print("First 10 bytes after trim")
reader := bytes.NewReader(body)
log.Print(body[:10])
decoder := json.NewDecoder(reader)
err = decoder.Decode(&configuration)
if err != nil {
log.Print("ERROR: ")
log.Panic(err)
}
}
я думаю на Этапе компиляция ошибка


John
04.04.2018
09:29:09
Кто-то забыл добавить импорты :))

Google

Vladislav
04.04.2018
09:30:13
хм
$ go get -v
go get: no install location for directory /Users/vlad/code/tgbots/bot outside GOPATH
For more details see: 'go help gopath'
может в этом проблема
в GOPATH

Александр
04.04.2018
09:31:17
Можете утаскивать - https://play.golang.org/p/6Xggpg6MV8G ?

Daniel
04.04.2018
09:32:20
и вывод ошибок в случайном порядке всегда. отлично...

Admin
ERROR: S client not available

Александр
04.04.2018
09:33:45
пошло поехало... ?

Vladislav
04.04.2018
09:34:34
я не пойму, что за тип Config, такого объявления не вижу в коде
это встроенный в Go тип ?
import (
"github.com/go-telegram-bot-api/telegram-bot-api"
"log"
"io/ioutil"
"bytes"
"encoding/json"
"github.com/jinzhu/gorm"
_ "github.com/jinzhu/gorm/dialects/sqlite"
"os"
"io"
)
все Импорты
https://golang.org/pkg/go/types/#Config
вот нашел такое
$ go run bot.go
# command-line-arguments
./bot.go:3:8: imported and not used: "go/types"
я правильно понял, что мне надо пакет такой поставить?

Daniel
04.04.2018
09:38:20
надо убрать из импортов лишний пакет

Vladislav
04.04.2018
09:39:33
echo $GOPATH
/Users/username/go
это норм?
настроено

Daniel
04.04.2018
09:41:28
да

Google

Vladislav
04.04.2018
09:41:32
$ go env
GOARCH="amd64"
GOBIN=""
GOCACHE="/Users/username/Library/Caches/go-build"
GOEXE=""
GOHOSTARCH="amd64"
GOHOSTOS="darwin"
GOOS="darwin"
GOPATH="/Users/username/go"
GORACE=""
GOROOT="/usr/local/Cellar/go/1.10.1/libexec"
GOTMPDIR=""
GOTOOLDIR="/usr/local/Cellar/go/1.10.1/libexec/pkg/tool/darwin_amd64"
вот я такое вижу, мне кажется что тут что-то не так
в общем проблема такая, есть тип Config, а Go его не видит

Александр
04.04.2018
09:45:06
?
версия для зануд

Макс
04.04.2018
09:50:16
Народ, кто нибудь писал прогу на Qt Go? Получилось ли?

Daniel
04.04.2018
09:51:36
тут проскакивали даже скриншоты

Макс
04.04.2018
09:52:19
Здесь слишком много сообщений, чтобы найти искомое

Александр
04.04.2018
09:52:28
мне вот интересно
type Errors []*OneError
func (e Errors) Add(err *OneError) {
e = append(e, err)
}
это допустимо вообще O_o
хотел красиво сэкономить на append

Arch
04.04.2018
09:53:44

Александр
04.04.2018
09:54:25
с указателем не тянет
first argument to append must be slice; have *Errors

Arch
04.04.2018
09:54:54
надо писать (*e)

Vladislav
04.04.2018
10:00:33
с переменной configuration Config
выполняется следующее действие в программе
err = decoder.Decode(&configuration)