thảo luận Tất tần tật về Go (Golang)

Bạn @weedvnz giải thích sai rồi.
  • Ở ví dụ đầu tiên, main thread sẽ block đến khi nào channel done có output -> Sai, main thread block đến khi nào có nhận đc value đầu tiền từ done channel hoặc done channel bị closed.
  • Deadlock là vì trong goroutine worker gửi 3 tới channel num mà không có receiver wait for message (num là unbuffered channel nên goroutine worker bị blocked, trong khi trong main thread thì bị blocked vì waiting for data from done channel, vì vậy mới ra deadlock (both threads are waiting for each other)

Code:
working...done
fatal error: all goroutines are asleep - deadlock!

goroutine 1 [chan receive]: <- receiver bị block
main.main()
/tmp/sandbox835183100/prog.go:24 +0xa5

goroutine 6 [chan send]: -> sender bị block
main.worker(0xc00005e060, 0xc00005e0c0)
/tmp/sandbox835183100/prog.go:13 +0xf8
created by main.main
/tmp/sandbox835183100/prog.go:22 +0x89

Program exited: status 2.
 
Bạn @weedvnz giải thích sai rồi.
  • Ở ví dụ đầu tiên, main thread sẽ block đến khi nào channel done có output -> Sai, main thread block đến khi nào có nhận đc value đầu tiền từ done channel hoặc done channel bị closed.
  • Deadlock là vì trong goroutine worker gửi 3 tới channel num mà không có receiver wait for message (num là unbuffered channel nên goroutine worker bị blocked, trong khi trong main thread thì bị blocked vì waiting for data from done channel, vì vậy mới ra deadlock (both threads are waiting for each other)

Code:
working...done
fatal error: all goroutines are asleep - deadlock!

goroutine 1 [chan receive]: <- receiver bị block
main.main()
/tmp/sandbox835183100/prog.go:24 +0xa5

goroutine 6 [chan send]: -> sender bị block
main.worker(0xc00005e060, 0xc00005e0c0)
/tmp/sandbox835183100/prog.go:13 +0xf8
created by main.main
/tmp/sandbox835183100/prog.go:22 +0x89

Program exited: status 2.
Em đang hiểu là worker wait main thread nhưng main thread close rồi nên mới dead lock
my bad, sorry bà con
 
Last edited:
Chào các đạo hữu trong và ngoài ngành
Em hiện tại đang muốn sau này theo backend golang. Theo mấy thím thì nên học framework nào (cái nào mà các cty đang ở VN thường dùng). Có thím nào làm TIKI ko ? nghe đồn TIKI làm nhiều golang.
 
Mình không biết tiki dùng gì, nhưng mình thấy có thống kê most github stars go web framework library

Cá nhân mình đã dùng qua gin và kit thì
  • Gin khá đơn giản, dùng có cảm giác giống như dùng express with nodejs. tuy nhiên phải tự structure layer để maintain code tốt.
  • Kit thì well-structured, cần thời gian đọc hiểu cách triển khai, nhưng khi code organize khá hợp lý và giảm được nhiều boilerplate code.
 
Mình không biết tiki dùng gì, nhưng mình thấy có thống kê most github stars go web framework library

Cá nhân mình đã dùng qua gin và kit thì
  • Gin khá đơn giản, dùng có cảm giác giống như dùng express with nodejs. tuy nhiên phải tự structure layer để maintain code tốt.
  • Kit thì well-structured, cần thời gian đọc hiểu cách triển khai, nhưng khi code organize khá hợp lý và giảm được nhiều boilerplate code.
Dùng cho dự án microservices thì Gin, Echo hay GoKit ngon hơn hở bác?
 
Dùng cho dự án microservices thì Gin, Echo hay GoKit ngon hơn hở bác?

Tuỳ theo dự án nhé.
Nếu dự án chỉ là
  • CRUD API
  • Simple logic
  • Proxy server only
Thì dùng gin hoặc echo đều được

Nếu dự án chia nhiều layer và
  • Access external API
  • API logic phức tạp (using multiple datasources hoặc có background task)
Thì dùng Gokit tốt nhé

Thực ra mình vẫn khuyên nên dùng go-kit. Lí do là vì nó có sẵn layer structure nên mình adapt vào dễ. Còn gin và echo viết dễ nhưng sau này cần phát triển lên cho team nhiều người cần có convention chung để maintain, lúc đó sẽ vất vả hơn go-kit
 
Chào các đạo hữu trong và ngoài ngành
Em hiện tại đang muốn sau này theo backend golang. Theo mấy thím thì nên học framework nào (cái nào mà các cty đang ở VN thường dùng). Có thím nào làm TIKI ko ? nghe đồn TIKI làm nhiều golang.
Go tốt nhất đừng vô Tiki, kiếm chỗ khác đi. Bên đây nói chung luôn trừ các team Java đc chuẩn hoá đỡ hơn 1 tí, Mấy team còn lại dùng các ngôn ngữ khác chỉ kiểu vỡ lòng thôi, ko học đc gì nhiều đâu.
Tiện đây thím nào có kinh nghiệm Golang or Python vô team tui nha(inbox CV cho mình để hồ sơ đc linh động nha :D)
https://itviec.com/viec-lam-it/go-python-engineer-up-to-2000-tiki-corporation-4012
 
Go tốt nhất đừng vô Tiki, kiếm chỗ khác đi. Bên đây nói chung luôn trừ các team Java đc chuẩn hoá đỡ hơn 1 tí, Mấy team còn lại dùng các ngôn ngữ khác chỉ kiểu vỡ lòng thôi, ko học đc gì nhiều đâu.
Tiện đây thím nào có kinh nghiệm Golang or Python vô team tui nha(inbox CV cho mình để hồ sơ đc linh động nha :D)
https://itviec.com/viec-lam-it/go-python-engineer-up-to-2000-tiki-corporation-4012

Ủa là sao, fen làm Tiki đúng không, trên bảo đừng vào, dưới lại gạ vô team :eek:
 
Go tốt nhất đừng vô Tiki, kiếm chỗ khác đi. Bên đây nói chung luôn trừ các team Java đc chuẩn hoá đỡ hơn 1 tí, Mấy team còn lại dùng các ngôn ngữ khác chỉ kiểu vỡ lòng thôi, ko học đc gì nhiều đâu.
Tiện đây thím nào có kinh nghiệm Golang or Python vô team tui nha(inbox CV cho mình để hồ sơ đc linh động nha :D)
https://itviec.com/viec-lam-it/go-python-engineer-up-to-2000-tiki-corporation-4012

Job requirement như vậy mà trả 2k (lại còn upto nữa) là hơi thấp. Vì để match được experience như thế cần ít nhất 3-4 năm kinh nghiệm chuyên về backend. 3k thì hợp lý hơn.
 
Sắp ra trường thì học Go có sớm ko mấy bác. Thấy job Go level fresher junior hiếm phết, thường thì là middle level, có kinh nghiệm backend trước. Em hiện đang biết về nodejs với reactjs để làm mấy project nhưng muốn theo hướng backend hơn, đặc biệt là cái Go này, ko biết giờ em nên focus vào cái nào. Nếu được thì cho em hỏi job Go level này thì cần biết gì với có khả handle những task ntn luôn, em cảm ơn :adore:

via theNEXTvoz for iPhone
 
Sắp ra trường thì học Go có sớm ko mấy bác. Thấy job Go level fresher junior hiếm phết, thường thì là middle level, có kinh nghiệm backend trước. Em hiện đang biết về nodejs với reactjs để làm mấy project nhưng muốn theo hướng backend hơn, đặc biệt là cái Go này, ko biết giờ em nên focus vào cái nào. Nếu được thì cho em hỏi job Go level này thì cần biết gì với có khả handle những task ntn luôn, em cảm ơn :adore:

via theNEXTvoz for iPhone

Junior or Fresh thì 1 năm đầu tiên đa phần là:
  • viết CRUD API
  • viết test
  • viết code theo template của team

Nếu tiến bộ thì chuyển qua viết complex API logic, dùng goroutine, channel để implement concurrent jobs.

Yêu cầu sử dùng Go (các ngôn ngữ khác cũng thế) tiến bộ theo mức:
  • Functional (code chạy đc)
  • Testable (code test đc)
  • Readable (code đọc dễ hiểu)
  • Extendable (code phát triển dễ)
  • Security
  • Performance
 
Last edited:
Junior or Fresh thì 1 năm đầu tiên đa phần là:
  • viết CRUD API
  • viết test
  • viết code theo template của team

Nếu tiến bộ thì chuyển qua viết complex API logic, dùng goroutine, channel để implement concurrent jobs.

Yêu cầu sử dùng Go (các ngôn ngữ khác cũng thế) tiến bộ theo mức:
  • Functional (code chạy đc)
  • Testable (code test đc)
  • Readable (code đọc dễ hiểu)
  • Extendable (code phát triển lễ dễ)
  • Security
  • Performance
Cảm ơn bác :sweet_kiss:

via theNEXTvoz for iPhone
 
Em cũng đang học go, có đọc qua 1 số tài liệu thấy khá ổn. Bác có thể tham khảo thử:
Nhưng mà nếu ở HN thì tìm job cho intern hay fresher hơi khó. Kể cả lên đến senior hay junior cũng ít.
 
Sắp ra trường thì học Go có sớm ko mấy bác. Thấy job Go level fresher junior hiếm phết, thường thì là middle level, có kinh nghiệm backend trước. Em hiện đang biết về nodejs với reactjs để làm mấy project nhưng muốn theo hướng backend hơn, đặc biệt là cái Go này, ko biết giờ em nên focus vào cái nào. Nếu được thì cho em hỏi job Go level này thì cần biết gì với có khả handle những task ntn luôn, em cảm ơn :adore:

via theNEXTvoz for iPhone
Go giờ các công ty startup có techlead họ thích thì kêu lính đang làm chuyển sang thôi
Chứ mới ra trường không có job đâu
Muốn kiếm việc Backend fresher thì theo C#, Java thôi
 
Last edited:
Hi all guys,
Mình có 1 task về vụ chọn 1 framework để làm 1 con microservice RESTful API.
Yêu cầu:
  • High performance: cái này là quan trọng nhất, vì resource trên Cloud tương đối hạn chế mà lượng request cũng tương đối nhiều.
  • Learning curve cố gắng nhẹ nhẹ tí: nguyên team đéo có thằng nào biết "đi" cả. Với cả cái nào có nhiều tuts/docs để có thể refer cho dễ.

Tham vấn mấy bố "biết biết" thì chúng nó có recommend: gin, beego với cả iris.
Mấy cao nhân trên này thì thấy sao?
Thank all
 
Back
Top