Size: a a a

2020 April 26

AS

Alexandr Sokolov in Go-go!
inqfen
  instanceParams["instance-id"], err = client.GetMetadata("instance-id")
 if err != nil {
   fmt.Println(err)
   os.Exit(1)
 }
 instanceParams["public-ip"], err = client.GetMetadata("public-ip")
 if err != nil {
   fmt.Println(err)
   os.Exit(1)
 }


При наличии любого из err дальшейшая работа не нужна, нужно выплюнуть ошибку и упасть
На будущее - упасть с читаемой ошибкой == log.Fatalln(err)

А в остальном согласен с оратором выше
источник

i

inqfen in Go-go!
а кто это
в смысле вы возвращаете ошибку в run
и только в main err != nil
А есть дока какая-то? по run только go run гуглится
источник

а

а кто это in Go-go!
inqfen
А есть дока какая-то? по run только go run гуглится
ммм
я предложил делать код такого вида
func run() error {
  // logic...
}

func main() {
    if err := run(); err != nil {
       fmt.Println(err)
       os.Exit(1)
   }
}
источник

а

а кто это in Go-go!
а кто это
можно использовать errors.Is
можно использовать свою ошибку
если вам нужны разные коды в зависимости от ошибки, то вы можете использовать диспатч как я предложил тут
источник

i

inqfen in Go-go!
А, в смысле ошибку в return добавлять?
источник

а

а кто это in Go-go!
только возвращать
источник

а

а кто это in Go-go!
а main пусть разбирается, какой код нужно вернуть и что сделать с этой ошибкой
источник

i

inqfen in Go-go!
Хм, ну там за функцию может быть больше одной ошибки + она в main возвращает что она там получила. А есть смысл сделать отдельную структуру, в которую писать ошибки, а потом их в main обрабатывать?
источник

а

а кто это in Go-go!
ну в таком случае ошибки будут обрабатываться в одном месте
источник

а

а кто это in Go-go!
а не будут разбросаны по коду
источник

а

а кто это in Go-go!
еще можно использовать errors.Is
источник

i

inqfen in Go-go!
func run(errors *errors) metadata {
  metadata['1'], err = getMetadata(1)
 if err != nil {
   errors.metadata1 = err
   }
  metadata['2'], err = getMetadata(2)
 if err != nil {
   errors.metadata2 = err
   }
}
источник

i

inqfen in Go-go!
типа того
источник

а

а кто это in Go-go!
нет
источник

i

inqfen in Go-go!
А в main обрабатывать чо там в errors
источник

а

а кто это in Go-go!
inqfen
А в main обрабатывать чо там в errors
ну в этом плане да
источник

а

а кто это in Go-go!
inqfen
func run(errors *errors) metadata {
  metadata['1'], err = getMetadata(1)
 if err != nil {
   errors.metadata1 = err
   }
  metadata['2'], err = getMetadata(2)
 if err != nil {
   errors.metadata2 = err
   }
}
мне не нравится *errors
вы можете использовать wrap ошибок
или же сделать свою структуру
источник

i

inqfen in Go-go!
То есть выполнили, не вышли, потом в main посмотрели что в errors - в зависимости от этого написали что надо и вышли с определенным кодом
источник

i

inqfen in Go-go!
А, errors это и есть условная своя структура
источник

i

inqfen in Go-go!
Мб такая искаропки есть, не знаю
источник