Tôi đã viết một công cụ nhỏ trong Go cho OSX (sử dụng OpenGl cho cửa sổ đồ họa). Tôi có một số kinh nghiệm với các công cụ trò chơi C ++ ( http://morganjeff.weebly.com/ ) và quyết định dùng thử Go sau khi đọc về một số tính năng mà nó cung cấp.
Kể từ phiên bản Go 1.1, hỗ trợ cho hầu hết các tính năng tôi cần để viết một công cụ trò chơi (thực sự là một lõi trò chơi như một công cụ gợi ý các biên tập viên và những gì không) bao gồm:
- Ràng buộc chức năng thành viên (đối với hệ thống nhắn tin)
- Reflection được tích hợp sẵn (hữu ích cho việc tuần tự hóa, hỗ trợ công cụ bên ngoài, v.v.)
- Các giao diện (để thực hiện hành vi đa hình cho các hệ thống, thành phần, v.v.)
Một số lợi ích khi sử dụng Go (cho một dự án lớn):
- Kiểm tra được tích hợp vào ngôn ngữ (bao gồm kiểm tra điểm chuẩn và một số xác nhận)
- Các ví dụ rất dễ thêm vào ngôn ngữ (và chúng được biên dịch cho chính xác)
- Mã cụ thể của kiến trúc rất dễ thêm (thông qua các quy ước đặt tên tệp)
- Hồ sơ được xây dựng theo ngôn ngữ
- phiên bản nhập sẵn tích hợp (cho phép thêm các tệp nhị phân lớn vào kho lưu trữ riêng biệt từ nguồn, trong khi vẫn giữ phiên bản và cập nhật)
Một số lợi ích của việc sử dụng Go nói chung:
- Dễ dàng cấu trúc lại mã
- Go hỗ trợ phân luồng (không giống như C ++ xếp lớp trên cùng)
- tốc độ biên dịch siêu nhanh làm giảm nhu cầu hỗ trợ ngôn ngữ kịch bản
- hệ thống gõ tĩnh (giao diện được thỏa mãn thông qua gõ vịt hay còn gọi là ngầm)
- nhiều giá trị trả về, tham số được đặt tên, thuộc tính struct được gắn thẻ
- công cụ và tài liệu tích hợp tuyệt vời
- ngôn ngữ được quản lý
Một số nhược điểm của việc sử dụng Go:
- Không có macro hoặc mẫu
- Không có thư viện hỗ trợ các ngôn ngữ trưởng thành hơn
- ngôn ngữ được quản lý (được liệt kê hai lần trên mục đích)
- KHÔNG CÓ IDE
Có nhiều cách để có được bộ nhớ thô (nhập "không an toàn") và tôi sẽ liên kết một bài viết cho thấy cách chương trình đi có thể được định hình cho bộ nhớ và tốc độ. Nói chung, Go cho rằng đó là một chữ C hiện đại có vẻ rất đúng. Tôi nghĩ rằng nó được thiết kế "thông minh" (vì nhiều lý do hơn tôi đã đề cập) và quan trọng hơn, nó được ghi chép lại. Một công cụ được thiết kế trong Go sẽ khác một chút so với một công cụ được thiết kế trong C ++ (một thứ tôi vẫn đang làm quen), nhưng công cụ Go giải quyết được rất nhiều vấn đề chưa thực sự được giải quyết trong C ++ (cụ thể là song song, sự phức tạp của ngôn ngữ C ++ và việc sử dụng sai tính kế thừa).
Đây là bài viết tôi đã hứa:
http://blog.golang.org/2011/06/profiling-go-programs.html
-Jeff