Cơ hội của Google Go trở thành ngôn ngữ chính là gì? [đóng cửa]


58

Ai ở đây đang học đi? Có phải các công ty khác đang xem xét sử dụng nó? Nó có khả năng trở nên được sử dụng rộng rãi?


21
ruby trở nên phổ biến sau đường ray, mục tiêu-c sau iphone, những gì afterđể đi?
ohho

1
Thật kinh khủng, nó không giải quyết được gì cho hầu hết mọi người.
Daniel Little

6
Cơ hội nằm trong khoảng từ 0 đến 1. Bất cứ điều gì cụ thể hơn sẽ yêu cầu bằng Tiến sĩ Tiên lượng, điều mà tôi không có.
Rein Henrichs

1
@Rein Henrichs - bạn sẽ nhận được một, mặc dù ủy ban sẽ yêu cầu một vài thay đổi đối với luận điểm cuối cùng
Martin Beckett

3
Google thực sự nên xem xét việc phát triển SDK Android cho ngôn ngữ Go. Ít nhất là một sự khởi đầu.
setzamora

Câu trả lời:


46

Khi nói đến ngôn ngữ lập trình, câu ngạn ngữ cũ, "không phải bạn là ai, đó là người bạn biết" chắc chắn đúng. C và C ++ được tài trợ bởi AT & T, Java được Sun mang đến cho chúng tôi, gia đình .NET ra khỏi Microsoft và tất cả chúng đều trở nên rất phổ biến rất nhanh. Sau đó, chúng tôi có Objective-C và Python, đã tồn tại khá lâu và vẫn thực sự tối nghĩa cho đến khi chúng được phát hiện và thổi phồng lên bởi Apple và Google, và rồi đột nhiên chúng thực sự cất cánh. Nhưng ngôn ngữ mà không có một nhà tài trợ chính có xu hướng mòn mỏi trong tối nghĩa, cho dù chúng tốt như thế nào.

Go được tài trợ bởi Google. Không khó để đi đến kết luận đúng ở đây. Cho nó năm năm và nó sẽ rất lớn.


13
@ixtmixilix: Bạn có nghiêm túc không? Máy ứng dụngGWT nói khác.
imgx64

4
@ixtmixilix - Guice (khung IoC dựa trên Java) được viết bởi Google và được sử dụng trong giao diện người dùng và Wave của AdWords. Google đường may để sử dụng một số ngôn ngữ.
mlk

3
+1 Tôi đồng ý với lập luận chính của bạn (FORTRAN, COBOL và C vẫn hoạt động tốt), nhưng tôi không đồng ý về Go, bởi vì đây chỉ là một thử nghiệm cho việc tài trợ của công ty.
Apalala

2
AT & T đã không thực sự đẩy C hoặc C ++. C trở nên phổ biến vì nó là ngôn ngữ của Unix và sau đó vì nó tốt hơn Pascal cho các chương trình lớn hơn. C ++ chỉ là một loại lây lan, theo cuốn sách "Thiết kế và tiến hóa của C ++" của Stroustrup. Thông thường, các ngôn ngữ cần một ứng dụng sát thủ hoặc tài trợ của công ty lớn để đạt được thành công lớn, nhưng các ngôn ngữ có thể đạt được thành công lớn mà không cần phải bỏ lỡ hoặc bỏ lỡ.
David Thornley

3
Đã năm năm rồi - bạn nghĩ sao?
hà mã

17

Tôi thực sự không nghĩ rằng Go sẽ thành công như vậy. Một lý do tại sao nó sẽ không đạt được số lượng lớn là vì nó được dự định là một ngôn ngữ để lập trình hệ thống.


17
Tôi không đồng ý. Hãy xem mã nguồn Linux cho 'echo', sau đó hãy xem triển khai Go của echo. Nếu ngôn ngữ có thể loại bỏ hàng ngàn dòng khỏi một lệnh đơn giản như vậy, thì nó có thể có thể loại bỏ các dòng như các thư viện xử lý đồ họa. Và nếu nó có thể loại bỏ các thư viện xử lý đồ họa, có thể những người ở phần mềm id (chẳng hạn) một ngày nào đó sẽ thấy nó hữu ích hơn C / C ++. Và vì id có thói quen phát hành mã nguồn cho các trò chơi của họ, đồ họa 3d trong Go có thể rất lớn trong vòng 5 năm.
ixtmixilix

14
@ixtmixilix Linux không liên quan gì đến echo, đó là một phần của GNU.
thay thế

3
Bạn đã bao giờ nhìn thấy bất cứ điều gì viết bằng erlang? Đó không phải là chúa khủng khiếp.
Unix Janitor

2
Tôi nghĩ Go sẽ chỉ vượt qua C / C ++ như ngôn ngữ hệ thống nếu hệ điều hành của Google tắt. Nếu hệ điều hành của Google không cất cánh, tôi nghĩ rằng nó sẽ gặp khó khăn hơn nhiều khi đánh vào dòng chính.
Jordan Parmer

2
Neiter tôi thik rằng Go sẽ phát triển rất nhanh. Lý do của tôi: 1. Cú pháp khá lạ 2. Quá nhiều Limbo 3. Thư viện không đầy đủ 4. Mô hình đồng thời tốt hơn trên Erlang
Daniel Voina

15

Có một nhu cầu thực sự cho một ngôn ngữ hệ thống với các tính năng hiện đại hơn. C và C ++ quá bị ràng buộc bởi mã kế thừa và khả năng tương thích ngược ở đây để cải thiện nhiều. Điều đó nói rằng, tôi không nghĩ Go hoàn thành vai trò đó ở dạng hiện tại. Thiết kế của nó quá tối giản. Mặc dù mô hình đồng thời của nó rất thú vị, nó mang lại một số tính năng khác từ các ngôn ngữ cấp cao hơn cho thế giới hệ thống. (Thời gian qua tôi đã kiểm tra, được thừa nhận là một thời gian trước đây, nó thậm chí không có trường hợp ngoại lệ.) Hơn nữa, ít nhất là trong phạm vi mà các Benchmark game máy tính Ngôn ngữ là một biện pháp tốt (đó là phải thừa nhận là một chỉ số rất thô), nó không gần như nhanh như một ngôn ngữ hệ thống "thực" cần phải có.

Tôi nghĩ rằng ngôn ngữ có cơ hội tốt nhất để lấp đầy khoảng trống của một ngôn ngữ hệ thống hiện đại hơn là D . D mạnh hơn về mặt kỹ thuật so với Go nhưng yếu hơn về mặt chính trị. Nó không được hỗ trợ bởi một tập đoàn lớn. Những gì nó thực sự cần là một số thư viện (điều này hiện đang được giải quyết nhanh chóng khi thông số ngôn ngữ ổn định) và một ứng dụng sát thủ.


7
tái "nó thậm chí không có trường hợp ngoại lệ" Đó là một quyết định quan trọng đã được thực hiện - golang.org/doc/go_faq.html
user151019

1
@Mark: Thú vị. Hoảng loạn và phục hồi trông giống như ngoại lệ tê liệt. D có các câu lệnh phạm vi, tương đương với defer (), nhưng với các ngoại lệ bình thường.
dsimcha

3
Nó không có ngoại lệ, nhưng không cần chúng. Thay vào đó, nó cho phép nhiều giá trị trả về, làm cho foo, err := SomeFunc()phổ biến. Đối với các vấn đề lớn, hoặc các điểm mà err không hoạt động tốt, bạn có thể sử dụng panic()recover(). Tuy nhiên, những thứ này được sử dụng rất hiếm khi; không có cách nào để vượt qua ngoại lệ lên ngăn xếp nếu ngăn xếp rất ngắn và ngăn xếp ngắn là phổ biến nơi có nhiều luồng đồng thời.
crazy2be

3
"D về mặt kỹ thuật mạnh hơn nhiều so với Go", "Thiết kế của nó quá tối giản". Thật thú vị khi bạn nói điều này giống như đó là sự thật. Đó chỉ là ý kiến ​​của bạn, đối mặt với nó.
Moshe Revah

10

Tôi đang học Go và vâng, nó được sử dụng hiệu quả bên cạnh Google và Heroku.

Go chắc chắn là một ngôn ngữ tốt đẹp cho lập trình hệ thống. Mã đơn giản như trong C, các cấu trúc mạnh mẽ như trong C ++ và các tính năng an toàn như trong Java. Vì nó là một ngôn ngữ rất trẻ, rất nhiều điều hay từ các ngôn ngữ khác đã được kế thừa:

  • lặp đi lặp lại trên phạm vi
  • Các kênh (quên mutexes, v.v.)
  • không phân cấp kiểu, chỉ kế thừa giao diện
  • trong thực tế, Go thậm chí không biết các lớp nhưng "Loại" linh hoạt hơn: các giao diện được tự động kế thừa khi các phương thức được xác định khớp
  • ít nồi hơi: i := 1thay vì int i = 1, func f(x, y, z int)thay vì void f(int x, int y, int z), type Foo struct { a, b int }; bar := Foo{1, 2}thay vìclass Foo { int a; int b; Foo(int a, int b) { this.a = a; this.b = b; } } /* ... */ Foo bar = new Foo(1, 2);
  • ngoại lệ ("hoảng loạn") chỉ dành cho các trường hợp thực sự đặc biệt: trong các trường hợp khác, hàm dễ bị lỗi có thể trả về một tham số lỗi bổ sung mà bạn có thể dễ dàng bỏ qua

Xem xét tất cả những điều tốt đẹp này và sự an toàn và hiệu suất chỉ được biết đến từ các ngôn ngữ được nhập tĩnh, rất nhiều người từ cộng đồng ngôn ngữ động đã bắt đầu thích Go. Trong hầu hết các trường hợp, mã Go không dài hơn mã Ruby, nhưng trong mọi trường hợp an toàn hơn và có cấu trúc tốt hơn.

Nhưng cuối cùng, tôi đoán rằng đối số sát thủ cho Go là đồng thời. Đó là một ngôn ngữ giống như C có hỗ trợ đồng thời mạnh mẽ chỉ được biết đến từ các ngôn ngữ chức năng.


2
Gần đây tôi đã yêu Go khi học nó để lập trình AppEngine và tôi không thể nói điều đó tốt hơn sau đó bạn đã làm. Làm tốt.
Adam Crossland

5

Tôi muốn nói rằng điều này chủ yếu phụ thuộc vào các thư viện / dịch vụ / phần mềm sẽ được tạo trong / cho / sử dụng Go. Mọi người sử dụng một cái gì đó trong ba tình huống (vấn đề theo thứ tự): khi thực tế họ không có lựa chọn nào khác (Objective-C), khi môi trường xung quanh họ sử dụng nó (FORTRAN), khi nó giúp cuộc sống của họ dễ dàng hơn (Ruby).


5

Có thể hơi muộn cho việc này, nhưng Go đang trở thành một ngôn ngữ phổ biến hiện nay và có khả năng sẽ đi vào dòng chính với việc Google đẩy nó về phía trước. Nó đang được thúc đẩy như là một ngôn ngữ được sử dụng cho các hệ thống và sản phẩm trong Google và đang được thúc đẩy như một ngôn ngữ để sử dụng với Google App Engine. Có một số người rất sắc sảo trong phần phụ trợ của việc xây dựng Go và tăng cường nó. Có một số người rất thông minh và giàu trí tưởng tượng làm việc trên các thư viện của bên thứ ba cho Go.

Đi vào chỗ trống mà các ngôn ngữ khác chưa hoàn toàn lấp đầy. Đối với tôi, tôi đã từng cố gắng lấp đầy khoảng trống đó bằng Perl và một loạt các cách giải quyết và thủ thuật. Tôi không tin đó là ngôn ngữ hoàn hảo cho mọi tình huống và mọi người, nhưng chắc chắn đây là một ứng cử viên cho khá nhiều tình huống. Ví dụ, nó hoạt động tốt cho các ứng dụng web đồng thời hoạt động tốt cho các ứng dụng trên máy tính để bàn hoặc ứng dụng dựa trên máy chủ. Nó thực hiện công việc tuyệt vời như vậy với HTTP và WebSocket (có nghĩa là bạn có thể bỏ qua Apache hoặc nginx hoàn toàn) trong khi cũng chạy rất tốt trên Windows, Linux và OS X cho cả daemon và cho các ứng dụng máy tính để bàn thông thường. Ngay bây giờ tình huống duy nhất mà nó thất bại đối với tôi là cho các ứng dụng Android, điều mà tôi hy vọng sẽ sớm được khắc phục. Tôi sử dụng nó cho các ứng dụng máy tính để bàn Windows, ứng dụng máy tính để bàn Linux và ứng dụng web dựa trên Linux.

Tôi tin rằng sẽ mất vài năm trước khi nó thực sự đạt được xu hướng, nhưng nó sẽ đến đó. Tôi nghĩ rằng nó cần phải xây dựng thêm các thư viện của bên thứ ba, giống như loại số và lựa chọn mà Perl có với CPAN. Nó sẽ đến đó.


3

Dù sao thì chính thống có nghĩa là gì? Không biết điều đó, thật khó để trả lời câu hỏi này. Chúng ta hãy nhìn một chút về điều đó.

Có rất nhiều định nghĩa có thể. Ở đây có một ít:

Quan điểm quản lý:

  • Có khách hàng yêu cầu bạn sử dụng nó
  • Có quản lý yêu cầu bạn sử dụng nó
  • Sẽ không bị quản lý chỉ trích vì sử dụng nó

Quan điểm của nhà phát triển:

  • Các công cụ ngôn ngữ thường có sẵn (ví dụ: trong các bản phân phối Linux)
  • Các công cụ ngôn ngữ sẽ có sẵn trong 10 năm
  • Tạo các tạo phẩm phần mềm sẽ tồn tại và được sử dụng ít nhất 10 năm

Quan điểm nghề nghiệp:

  • Kỹ năng ngôn ngữ cụ thể có thể chuyển sang các công việc khác
    • Nhà tuyển dụng yêu cầu nó

Với tất cả những điều trên, tôi cho rằng câu trả lời trung thực duy nhất có lẽ là quá sớm để nói với dạy nhưng tôi tin rằng chỉ số tốt nhất về tuổi thọ thực sự là số lượng nhỏdoanh nghiệp sử dụng ngôn ngữ. Các tổ chức lớn đều rất tốt - thậm chí họ có thể cần thiết cho sự phát triển của ngôn ngữ hoặc hệ thống công cụ vì quy mô đầu tư mà họ có thể áp dụng - nhưng họ khá dễ bị lỗi thời (với một vài ngoại lệ). Ngược lại, nếu một doanh nghiệp nhỏ tự xây dựng bằng cách sử dụng ngôn ngữ để phân phối sản phẩm và dịch vụ, họ rất có thể muốn đóng góp để đảm bảo rằng họ sẽ vẫn có thể làm như vậy trong tương lai. Họ cũng tạo thành nền tảng của một thị trường việc làm mạnh mẽ trong khu vực và nhu cầu về công cụ cũng vậy. Vui thay, đó là một số chỉ số về tính chính thống trong danh sách của tôi (có thể nhiều hơn, tùy thuộc vào ý thích của quản lý).

Vậy, có bao nhiêu người bên ngoài Google đang sử dụng Go cho công việc của họ? Tôi không có ý kiến. (Tôi thì không. Nhu cầu của tôi hiện đang được phục vụ tốt bởi hỗn hợp Java, C và Tcl. YMMV.)


Tóm tắt tuyệt vời về ý nghĩa của dòng chính thống. Tôi nghĩ rằng Go có tất cả những thứ này, ngoại trừ khách hàng của bạn yêu cầu bạn sử dụng nó.
Khăn

2

Nó đã phổ biến hơn một số ngôn ngữ.

Có khả năng, Go là ngôn ngữ quan trọng nhất trong hơn 20 năm qua. Nó thực sự mang lại một số lợi ích tuyệt vời về bộ dữ liệu khổng lồ, mà các trang web truyền thông xã hội, điện toán đám mây, Tìm kiếm và Di động hiện diện.

Các trang web như Facebook, Twitter, Linkedin, YouTube và các mạng phân phát quảng cáo có nhiều sử dụng hơn cho Google Go so với Ruby On Rails, ít nhất là trong một số bối cảnh.


1

Tôi nhìn vào Go khi tôi nghe về nó. Là một người mới bắt đầu hoàn chỉnh, tôi vẫn đang học các ngôn ngữ mới bắt đầu (trong trường hợp của tôi là Java, C #, Python và Scheme), rất nhiều thứ để học, nhưng nếu tôi không mải mê với nhiều ngôn ngữ khác nhau, tôi sẽ nghiêm túc xem xét nó

Tôi nghĩ ở cấp độ của mình, sẽ không có hại gì trong việc giảm bớt những điều cơ bản trước khi nhảy vào bandwagons. Mặc dù, nếu tôi nhớ đúng, khi tôi đang tìm kiếm Go, tôi đã bị thu hút bởi Erlang vì một số lý do.


1

Tôi chỉ nhìn vào Go vì câu hỏi này vì vậy tôi thực sự không thể nhận xét liệu nó có cất cánh như một ngôn ngữ chính hay không, nhưng có một điều khiến tôi thực sự phấn khích:

http://golang.org/doc/go_spec.html#Channel_types

Lần đầu tiên tôi bắt gặp khái niệm Kênh trong Occam-pi và tôi phải nói rằng đó là một trong những khái niệm lập trình tốt nhất từ trước đến nay . Nó làm cho sự tương tranh dường như quá dễ dàng khi làm điều tương tự trong ngôn ngữ loại C đôi khi có thể là một nỗi đau.

Từ những gì tôi đã thấy (trong 10 phút tôi đã xem), Go dường như đang cố gắng kết hợp nhiều khái niệm lập trình khác nhau, nhưng điều đó có nguy cơ trở thành Jack của tất cả các giao dịch, không thành thạo.


0

Tôi nghi ngờ rằng liệu nó có trở thành xu hướng hay không sẽ phụ thuộc vào việc Google có sử dụng ngôn ngữ này như một ngôn ngữ được hỗ trợ cho appengine và / hoặc GWT hay không.


2
Làm thế nào một ngôn ngữ hệ thống sẽ hữu ích cho Google App Engine?
ixtmixilix

Tôi sẽ nói rằng chỉ vì nó là ngôn ngữ hệ thống được biên dịch thành mã máy hiện tại sẽ không ngăn Google nhắm mục tiêu vào các nền tảng khác trong tương lai. Chỉ cần nhìn vào những gì họ đã thực hiện với java - biên dịch thành JavaScript trong trường hợp GWT và cài đặt dalvik vm cho Android. Tương tự như vậy, Facebook biên dịch PHP. Tôi có thể dự tính một đầu ra của Go có thể cài đặt được vào appengine vào một ngày nào đó trong tương lai.
Chris Buckett

+1 - điều quan trọng là nó hữu ích cho một cái gì đó. Chỉ cần nhìn vào những gì iPhone đã làm cho Objective-C.

3
Vâng , điều đó vừa xảy ra . Bây giờ hãy xem liệu nó có cất cánh không ...
Elad

3
Để ghi lại, tôi hiện đang phát triển một ứng dụng web lớn, đầy tham vọng trong thời gian chạy AppEngine Go. Go là rất hiệu quả và nhanh chóng. Mã này rất dễ đọc. Đó là một ngôn ngữ tuyệt vời.
Adam Crossland

0

Tôi ước Go sẽ trở nên phổ biến.

Đó là cú pháp mạnh mẽ. (Tìm hiểu những lợi thế từ python, C, Java). Nó tốt cho CPU đa lõi. (Chức năng kênh tốt hơn nhiều sau đó lập trình luồng). Thiết kế ngăn chặn nhiều cạm bẫy của lập trình viên. (con trỏ sai, cùng kiểu mã hóa bởi công cụ gofmt, ngăn ngừa lỗi chưa được khởi tạo biến.

Nhưng, sau khi tìm hiểu sâu, tôi thấy nó có thể phù hợp để phát triển khả năng chịu lỗi và kiến ​​trúc có thể mở rộng

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.