LINUX.ORG.RU

История изменений

Исправление r, (текущая версия) :

Ну, это ерунда.

А по моему совсем не ерунда если нельзя контролировать скоуп различных закрываемых ресурсов типа файлов/соединений/запросов в бд. Особенно это критично в бд будет когда insert/update после select будет конкурировать с этим же select чуть ранее не отпуская его до завершения функции.

Да и вообще - посмотри код работы с бд из их же примеров:

age := 27
rows, err := db.Query("SELECT name FROM users WHERE age=?", age)
if err != nil {
    log.Fatal(err)
}
for rows.Next() {
    var name string
    if err := rows.Scan(&name); err != nil {
        log.Fatal(err)
    }
    fmt.Printf("%s is %d\n", name, age)
}
if err := rows.Err(); err != nil {
    log.Fatal(err)
}
Это же ужас.

Даже на эрланге аналог будет приблизительно таким:

 Age = 27,
 do([error_m || 
      Rows <- db:query(db, "SELECT name FROM users WHERE age=?", Age),
     db:foreach(fun({Name}) -> io:format("~s is ~d\n", [Name, Age]) end, Rows)
 ])

без всего этого бойлерплейта.

Особенно мне нравится что я тут совсем не вижу почему оно прерывает execution. Черная магия log.Fatal?

Исправление r, :

Ну, это ерунда.

А по моему совсем не ерунда если нельзя контролировать скоуп различных закрываемых ресурсов типа файлов/соединений/запросов в бд. Особенно это критично в бд будет когда insert/update после select будет конкурировать с этим же select чуть ранее не отпуская его до завершения функции.

Да и вообще - посмотри код работы с бд из их же примеров:

age := 27
rows, err := db.Query("SELECT name FROM users WHERE age=?", age)
if err != nil {
    log.Fatal(err)
}
for rows.Next() {
    var name string
    if err := rows.Scan(&name); err != nil {
        log.Fatal(err)
    }
    fmt.Printf("%s is %d\n", name, age)
}
if err := rows.Err(); err != nil {
    log.Fatal(err)
}
Это же ужас.

Даже на эрланге аналог будет приблизительно таким:

 Age = 27,
 do([error_m || 
      Rows <- db:query(db, "SELECT name FROM users WHERE age=?", Age),
     db:foreach(fun({Name}) -> io:format("~s is ~d\n", [Name, Age]) end, Rows)
 ])

без всего этого бойлерплейта.

Исправление r, :

Ну, это ерунда.

А по моему совсем не ерунда если нельзя контролировать скоуп различных закрываемых ресурсов типа файлов/соединений/запросов в бд. Особенно это критично в бд будет когда insert/update после select будет конкурировать с этим же select чуть ранее не отпуская его до завершения функции.

Да и вообще - посмотри код работы с бд из их же примеров:

age := 27
rows, err := db.Query("SELECT name FROM users WHERE age=?", age)
if err != nil {
    log.Fatal(err)
}
for rows.Next() {
    var name string
    if err := rows.Scan(&name); err != nil {
        log.Fatal(err)
    }
    fmt.Printf("%s is %d\n", name, age)
}
if err := rows.Err(); err != nil {
    log.Fatal(err)
}
Это же ужас.

Даже на эрланге аналог будет приблизительно таким:

 Age = 27,
 do([error_m || 
      Rows <- db:query(db, "SELECT name FROM users WHERE age=?", Age),
     db:foreach(fun({Name}) -> io:format("%s is %d\n", [Name, Age]) end, Rows)
 ])

без всего этого бойлерплейта.

Исходная версия r, :

Ну, это ерунда.

А по моему совсем не ерунда если нельзя контролировать скоуп различных закрываемых ресурсов типа файлов/соединений/запросов в бд. Особенно это критично в бд будет когда insert/update после select будет конкурировать с этим же select чуть ранее не отпуская его до завершения функции.

Да и вообще - посмотри код работы с бд из их же примеров:

age := 27
rows, err := db.Query("SELECT name FROM users WHERE age=?", age)
if err != nil {
    log.Fatal(err)
}
for rows.Next() {
    var name string
    if err := rows.Scan(&name); err != nil {
        log.Fatal(err)
    }
    fmt.Printf("%s is %d\n", name, age)
}
if err := rows.Err(); err != nil {
    log.Fatal(err)
}
Это же ужас.

Даже на эрланге аналог будет приблизительно таким:

 Age = 27,
 do([error_m || 
      Rows <- db:query(db, "SELECT name FROM users WHERE age=?", Age),
     db:foreach(fun({Name}) -> io:format("%s is %d\n", [Name, Age]) end)
 ])

без всего этого бойлерплейта.