Troll mà lộ quá thì nhạt lắm bạn ơi
Troll gì bạn. Golang nó có cú pháp đơn giản dễ đọc. Hiệu suất của C++. Tôi nói nhưng bạn không hiểu lại bảo troll.
Troll mà lộ quá thì nhạt lắm bạn ơi
speed của crystal hay nim ăn đứt go, vì chúng nó backend là LLVM/GCC (nim thì transpile sang c, lúc đó thì dùng clang hay gcc để compile đều được, crystal thì transpile sang llvm opcode), go thì được cái compile nhanh, chứ optimization thì kém hơn (không gõ dùng gcc-go hay go-llvm các kiểu thì có khá hơn không).https://www.techempower.com/benchmarks/#section=data-r18&hw=ph&test=db&l=zcasqn-f
Đẹp nhưng speed khá 1 ty chứ python ruby vốn dĩ chậm rồi.
Thằng Nim eco hẻo quá.
Nói chung vẫn thua go
speed của crystal hay nim ăn đứt go, vì chúng nó backend là LLVM/GCC (nim thì transpile sang c, lúc đó thì dùng clang hay gcc để compile đều được, crystal thì transpile sang llvm opcode), go thì được cái compile nhanh, chứ optimization thì kém hơn (không gõ dùng gcc-go hay go-llvm các kiểu thì có khá hơn không).
cơ mà nim no hope vãi, tôi để ý thằng này từ hồi nó còn tên là nimrod, phải nói là mỗi lần nó ra release mới là một lần giảm hứng thú, core dev toàn quan tâm vấn đề đâu đâu, nhét một đống feature vào mà không suy nghĩ kỹ, implementation cũng half baked, stdlib thì vẫn sơ sài, document thì gần như không có.
crystal thì đầu năm có tí phát triển mà sau đợt covid này lại dẹo rồi, thôi lại đợi năm sau
không tin thì tự check trên techempower, lằng nhằng.Làm web thì kiếm kết quả bench web thôi, chứ nhanh mà bench real web use case chậm thì cũng vậy
Thì tôi post link rồi đókhông tin thì tự check trên techempower, lằng nhằng.
ạch, tựThì tôi post link rồi đó
Go nó ngôn ngữ không quá xấu, simple enough, speed tạm tạm cũng hơn khối ông Node, Ruby, Python, PHP nên giờ đc adopt kha khá chứ chửi nó thì cũng chịu thôi, ko có ngôn ngữ nào vừa long lập trình viên.ạch, tự
cơ mà ấn tượng của tôi là nim/crystal ăn đứt go về performance trong vài bài test của vài individual.
thằng nodejs mới tởm lợm, tuy là dynamic language mà performance tương đương với mấy thằng compiled.Go nó ngôn ngữ không quá xấu, simple enough, speed tạm tạm cũng hơn khối ông Node, Ruby, Python, PHP nên giờ đc adopt kha khá chứ chửi nó thì cũng chịu thôi, ko có ngôn ngữ nào vừa long lập trình viên.
Mấy ngôn ngữ lập trình mới mới giờ hy vọng phải có cty lơn chống lưng, mới có đội dev optimize ngày đêm đc
if let path = Bundle.main.path(forResource: "TextFile", ofType: "txt") {
do {
let data = try String(contentsOfFile: path, encoding: .utf8)
let myStrings = data.components(separatedBy: .newlines)
TextView.text = myStrings.joined(separator: ", ")
} catch {
print(error)
}
}
do {
if let path = NSBundle.mainBundle().pathForResource("TextFile", ofType: "txt"){
let data = try String(contentsOfFile:path, encoding: NSUTF8StringEncoding)
let myStrings = data.componentsSeparatedByCharactersInSet(NSCharacterSet.newlineCharacterSet())
print(myStrings)
}
} catch let err as NSError {
//do sth with Error
print(err)
}
package main
import (
"bufio"
"fmt"
"log"
"os"
)
func main() {
file, err := os.Open("/path/to/file.txt")
if err != nil {
log.Fatal(err)
}
defer file.Close()
scanner := bufio.NewScanner(file)
for scanner.Scan() {
fmt.Println(scanner.Text())
}
if err := scanner.Err(); err != nil {
log.Fatal(err)
}
}
ờ, em cứ thích if, else rõ ràng như hồi nhỏ đi học. Nhiều ông viết if rồi check null mà cứ hỏi hỏi(??) đọc code dịch mệt vclthằng nodejs mới tởm lợm, tuy là dynamic language mà performance tương đương với mấy thằng compiled.
cơ mà tôi dùng quen ruby/elixir có stdlib tử tế rồi quay lại mấy thằng nodejs hay golang thấy bất tiện vãi, riêng mấy cái basic function để manipulate array/hashmap đã không bằng.
mà nói cái này lại nhớ thằng swift, mọi thứ đều ngon cơ mà cái stdlib như đấm vào mặt, ví dụ tôi hay evaluate language bằng mấy cái tính năng cơ bản như read file by lines các kiểu, thì trong crystal tôi chỉ cần `File.read_lines(file_path)` là được, swift thì
à mà cái này là 3.0 còn đỡ, swift 2.0 mới là cái tôi chửi:Code:if let path = Bundle.main.path(forResource: "TextFile", ofType: "txt") { do { let data = try String(contentsOfFile: path, encoding: .utf8) let myStrings = data.components(separatedBy: .newlines) TextView.text = myStrings.joined(separator: ", ") } catch { print(error) } }
tuy rằng có IDE nó đỡ, cơ mà nhìn mấy cái function name hay constant đều mất mẹ cảm tìnhCode:do { if let path = NSBundle.mainBundle().pathForResource("TextFile", ofType: "txt"){ let data = try String(contentsOfFile:path, encoding: NSUTF8StringEncoding) let myStrings = data.componentsSeparatedByCharactersInSet(NSCharacterSet.newlineCharacterSet()) print(myStrings) } } catch let err as NSError { //do sth with Error print(err) }
anh go cũng chả khá hơn
(mấy cái này copy từ SO)Code:package main import ( "bufio" "fmt" "log" "os" ) func main() { file, err := os.Open("/path/to/file.txt") if err != nil { log.Fatal(err) } defer file.Close() scanner := bufio.NewScanner(file) for scanner.Scan() { fmt.Println(scanner.Text()) } if err := scanner.Err(); err != nil { log.Fatal(err) } }
nhìn đã mất cảm tình
thằng nodejs mới tởm lợm, tuy là dynamic language mà performance tương đương với mấy thằng compiled.
cơ mà tôi dùng quen ruby/elixir có stdlib tử tế rồi quay lại mấy thằng nodejs hay golang thấy bất tiện vãi, riêng mấy cái basic function để manipulate array/hashmap đã không bằng.
mà nói cái này lại nhớ thằng swift, mọi thứ đều ngon cơ mà cái stdlib như đấm vào mặt, ví dụ tôi hay evaluate language bằng mấy cái tính năng cơ bản như read file by lines các kiểu, thì trong crystal tôi chỉ cần `File.read_lines(file_path)` là được, swift thì
à mà cái này là 3.0 còn đỡ, swift 2.0 mới là cái tôi chửi:Code:if let path = Bundle.main.path(forResource: "TextFile", ofType: "txt") { do { let data = try String(contentsOfFile: path, encoding: .utf8) let myStrings = data.components(separatedBy: .newlines) TextView.text = myStrings.joined(separator: ", ") } catch { print(error) } }
tuy rằng có IDE nó đỡ, cơ mà nhìn mấy cái function name hay constant đều mất mẹ cảm tìnhCode:do { if let path = NSBundle.mainBundle().pathForResource("TextFile", ofType: "txt"){ let data = try String(contentsOfFile:path, encoding: NSUTF8StringEncoding) let myStrings = data.componentsSeparatedByCharactersInSet(NSCharacterSet.newlineCharacterSet()) print(myStrings) } } catch let err as NSError { //do sth with Error print(err) }
anh go cũng chả khá hơn
(mấy cái này copy từ SO)Code:package main import ( "bufio" "fmt" "log" "os" ) func main() { file, err := os.Open("/path/to/file.txt") if err != nil { log.Fatal(err) } defer file.Close() scanner := bufio.NewScanner(file) for scanner.Scan() { fmt.Println(scanner.Text()) } if err := scanner.Err(); err != nil { log.Fatal(err) } }
nhìn đã mất cảm tình
ờ, em cứ thích if, else rõ ràng như hồi nhỏ đi học. Nhiều ông viết if rồi check null mà cứ hỏi hỏi(??) đọc code dịch mệt vcl
Go với rust nó ko có try catch force dev handle error có tâm hơn. Nói chung tôi code 1 thời gian lai thấy hay hơn try catch (này cảm nhận cá nhân thôi)
mình viết lib toàn quăng error code để check chứ ghét kiểu quăng exception rồi catch lại lắmTừ tư bản chủ nghĩa Error Code tiến lên xã hội chủ nghĩa Exception Try-Catch-Finally, thế rồi lại quay về ngày xưa à?
mình viết lib toàn quăng error code để check chứ ghét kiểu quăng exception rồi catch lại lắm
Vấn đề là dev dùng throw error vô tôị vạ (tôi cung từng lạm dụng cái chuyện này)Từ tư bản chủ nghĩa Error Code tiến lên xã hội chủ nghĩa Exception Try-Catch-Finally, thế rồi lại quay về ngày xưa à?
func (r *SQLRunner) BeginTx(ctx context.Context, options interface{}) (context.Context, error) {
var SQLTxOptions *sql.TxOptions = nil
if opts, ok := options.(*sql.TxOptions); ok {
SQLTxOptions = opts
}
tx, err := r.db.BeginTx(ctx, SQLTxOptions)
if err != nil {
return nil, err
}
c := context.WithValue(ctx, r.contextKeyTx, tx)
return c, nil
}
Từ tư bản chủ nghĩa Error Code tiến lên xã hội chủ nghĩa Exception Try-Catch-Finally, thế rồi lại quay về ngày xưa à?
Minh ko dùng go ,tính thử . và theo vi dụ trên thì ko lẽ mỗi lần call một func hay method nao đó thì ta phải check nil hả bácVấn đề là dev dùng throw error vô tôị vạ (tôi cung từng lạm dụng cái chuyện này)
Bên Go nó handle này nhìn hơi rối tý thôi. chứ áp dụng early return pattern thì thấy bt.
Với lại phải đọc code mới biết nó có throw error hay ko. Chư bt ko có document hay đoc src có biết nó throw erro khi nao.
Viết code mà quên try catch lát hồi error văng ra ko trace log này no cũng éo biết error từ function nào.
Đưong nhiên go cũng có cái throw error mạnh tới nỗi sập server đó là panic.
nhưng thương chỉ panic khi nào error nghiêm trọng như app start éo kết nối đc database thì run làm gì nữa.
Code:func (r *SQLRunner) BeginTx(ctx context.Context, options interface{}) (context.Context, error) { var SQLTxOptions *sql.TxOptions = nil if opts, ok := options.(*sql.TxOptions); ok { SQLTxOptions = opts } tx, err := r.db.BeginTx(ctx, SQLTxOptions) if err != nil { return nil, err } c := context.WithValue(ctx, r.contextKeyTx, tx) return c, nil }
Cứ chỗ nào err != nil thì return error ngay. Nhiều người viết 1 đống logic trong cái khúc err != nil thì chả rối.
list_of_something, nil = A.doX();
if err != nil {
return nil, err
}
dict_by_id = A.doY();
if err != nil {
return nil, err
}
string_split,nil = B.name.toString()
if err != nil {
return nil, err
}
result, nill = C.postProcessResult(string_split);
if err != nil {
return nil, err
}
return result
Minh ko dùng go ,tính thử . và theo vi dụ trên thì ko lẽ mỗi lần call một func hay method nao đó thì ta phải check nil hả bác
Python:list_of_something, nil = A.doX(); if err != nil { return nil, err } dict_by_id = A.doY(); if err != nil { return nil, err } string_split,nil = B.name.toString() if err != nil { return nil, err } result, nill = C.postProcessResult(string_split); if err != nil { return nil, err } return result
dict_by_id, err = A.doY();
if err != nil {
return nil, err
}
func (uh *userHandler) Login(w http.ResponseWriter, r *http.Request) (err error) {
//.....
u, err := checkAuth(data)
if err != nil {
if err == user.ErrWrongPassword || err == user.ErrUserNotFound {
return &ErrorAPI{
Type: app.ErrorTypeAuthInvalidCredentials,
Err: err,
Message: "invalid email or password",
StatusCode: http.StatusUnauthorized,
LogLevel: app.LogLevelWarn,
}
}
return err
}
//...
return nil
}
Code:func (uh *userHandler) Login(w http.ResponseWriter, r *http.Request) (err error) { //..... u, err := checkAuth(data) if err != nil { if err == user.ErrWrongPassword || err == user.ErrUserNotFound { return &ErrorAPI{ Type: app.ErrorTypeAuthInvalidCredentials, Err: err, Message: "invalid email or password", StatusCode: http.StatusUnauthorized, LogLevel: app.LogLevelWarn, } user_rights, err2 = user.getUserRight(u); ### vidu tiep tuc if err2 != nil { parsed_result, err3 = utils.parse(u, user_rights) if err3 !=nil { return nil, err3 } } } return err } //... return nil }