Mình vẫn thắc mắc tại sao Golang không (chưa) hỗ trợ generic type, bạn nào biết có thể chỉ mình với được không ? Vì mình cảm giác việc duplicate code xảy ra khá thường xuyên…
Share
Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.
Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.
Lost your password? Please enter your email address. You will receive a link and will create a new password via email.
Please briefly explain why you feel this question should be reported.
Please briefly explain why you feel this answer should be reported.
Please briefly explain why you feel this user should be reported.
Mình đi code lại con tendermint này ở công ty, thì mình thấy thế này nhé. Generics sẽ có 2 kiểu:
1. Khi biên dịch sẽ bỏ hết generic type đi, và ở runtime sẽ ép kiểu sau (như java): cách này thì biên dịch sẽ không sinh ra lớp mới, tuy nhiên là sẽ bị tốn performance khi ép kiểu.
2. Khi biên dịch sẽ giữ lại generic type, ví dụ như List thì sẽ dịch thành ListInt hoặc List sẽ dịch thành ListString (C# hãy C++ đang làm vậy)
Tuy nhiên với go thì mình không thấy có kiểu basic kiểu java.lang.Object, vậy thì làm theo kiểu 1 thì cũng không được, vì không có basic type thì sau ép kiểu kiểu gì nhỉ?
Tiếp theo nữa là cái kiểu viết hàm của go sẽ kiểu
func (bz HexBytes) MarshalJSON() ([]byte, error) {
nếu viết generic type sẽ kiểu này:func (bz T) MarshalJSON() ([]byte, error) {
Vậy thì nếu dịch theo kiểu 2 thì chẳng lẽ sẽ địch cho mọi đối lớp có trong chương trình sao?Vậy nên mình nghĩ rằng generics sẽ là 1 cơn đau đầu không dễ chịu cho tác giả của go, và nếu có viết thì chắc sẽ phải chọn phương án 1.
Mình cảm ơn bạn rất nhiều về sự chia sẻ. Toàn là những điều mình chưa nghĩ tới. Nhân tiện mình thấy cũng có một số anh em build-in ra generic type như vầy, không biết bác Rob Pike có hứng thú không nữa.
https://go2goplay.golang.org/