<hr/>**评论:**<br/><br/>ecmdome: <pre><p><a href="https://github.com/avelino/awesome-go/blob/master/README.md">https://github.com/avelino/awesome-go/blob/master/README.md</a></p></pre>SpaceDetective: <pre><p>This is worthy of being on the sidebar.</p></pre>rjc2013: <pre><p>How did I not know about this already!? There is some awesome stuff here, indeed. Thanks!</p></pre>HSP95: <pre><p>This exists for anything. Awesome-pythin, awesome-php, awesome-css, awesome-javascript. Just Google it!
Edit: I even think there exists an awesome-awesome list to list the awesome lists.</p></pre>BESSEL_DYSFUNCTION: <pre><p>I've spent the past year or so writing a series of high-performance, very parallelized libraries designed to solve a somewhat esoteric problem in the field of numerical astrophysics. It involves a bunch of super-fun computational geometry and generates some pretty gorgeous pictures.</p>
<p>At a language level, Go is pretty great for numerics (although there are still many problems with it). You have good control over the memory layout of your program without risking the types of bugs that come with manual memory management in C or Fortran, and there aren't too many fancy language features getting in the way of optimizing the crap out of your innermost for-loops. And, of course, it's also dead simple to write code in it.</p>
<p>The library ecosystem for this type of thing is pretty miserable, though. It's annoying to have to write, test, benchmark, and optimize things like Savitzky-Golay filters or univariate splines from scratch. I won't name names, but some of the Go-based numerical libraries that <em>do</em> exist are so slow and poorly written that they're not worth using at all (and in some cases, they can't even be fixed without introducing breaking changes to their APIs). Cgo helps a bit, but it's hardly a panacea.</p></pre>howeman: <pre><p>Do you have univariate spline code that's distributable? It is indeed a pain to write from scratch, so if you've already done it...</p>
<p>Definitely agree with the desire for a richer ecosystem of libraries. It is a nice language for numerics, but it's hard to break the cycle of developers need libraries which need to be created by developers. </p>
<p>We're working on mat64 (and gonum in general). It takes a lot of effort to build up the functionality (and we're all volunteers). It's gotten much better over the last year, for example, linear solve is now based on lapack, either with a pure-go implementation or with cblas/clapack backing. It's true that the API is still in flux but we're getting there.</p></pre>BESSEL_DYSFUNCTION: <pre><p>I have spline code that works and that runs fairly fast, but there would still be work to do before I'd feel comfortable distributing it to others. E.g. it currently doesn't let the user select boundary conditions, it doesn't memoize integrals of full sub-intervals, I'm a little unhappy with my TriDaig() implementation, etc.</p>
<p>That said, I'd be more than willing to supply you guys with a spline implementation once I've taken care of those sorts of things.</p>
<p>Yeah, I agree with you on the key issue here: it's hard to get scientists to use Go because there aren't a lot of numerical libraries written for it and that means that there aren't a bunch of people floating around who can write said libraries. gonum's our best hope at fixing that right now, so definitely keep doing what you're doing!</p></pre>howeman: <pre><p>Well, please join us if you're interested in helping to build things! For example, we have the BLAS code to support banded triangular matrices (the more general form of TriDiag()), and it would be nice to provide useful functionality to mat64</p></pre>realsmart: <pre><p>Please name the names. What existing library is slow? I am using gonum/floats and gonum/stat in my work. Wonder if it's a bad choice.</p></pre>BESSEL_DYSFUNCTION: <pre><p>Both of those are fine. (As far as I know. I don't have experience with a lot of the functions in gonum/stats). I'm not a huge fan of replacing simple for-loops with library calls (unless I'm writing code in Ocaml or python ;-) ), but if you are, gonum/floats is pretty much exactly what you want.</p></pre>afex: <pre><p>Twitch's backend is written in Go. Chat, video ingest/distribution, data analysis pipelines, etc</p></pre>santihbc: <pre><p>Do they also use it for live stream video encoding? Is there somewhere to read more about Twitch's system that you could point me to?</p></pre>t4nkbusta: <pre><p>Part 1: <a href="http://ossareh.posthaven.com/the-twitch-statistics-pipeline" rel="nofollow">http://ossareh.posthaven.com/the-twitch-statistics-pipeline</a></p>
<p>Part 2: <a href="http://blog.twitch.tv/2014/04/twitch-data-analysis-part-2-architectural-decisions/" rel="nofollow">http://blog.twitch.tv/2014/04/twitch-data-analysis-part-2-architectural-decisions/</a></p></pre>jrv: <pre><p>I'm developing a time series database and service monitoring system: <a href="http://prometheus.io">http://prometheus.io</a></p></pre>bmurphy1976: <pre><p>I wrote a scheduling system (something akin to Apache Mesos but much simpler) for my employer. It spins up and manages cloud servers on demand and schedules work on them. Go worked exceedingly well for this project. </p>
<p>I had written a similar system in C# (via mono) and RabbitMQ previously. The original system was baroque and performed poorly (it would start to collapse around 75 servers) and average processing time for queued operations was in milliseconds (excluding RabbitMQ overhead).</p>
<p>The second system written in Go has been tested at over 1000 servers without any significant load. It is built around a simple REST api and has no external dependencies (specifically RabbitMQ). Average processing time for queued operations is in 10's of microseconds (including REST/HTTP overhead).</p>
<p>It's quicker to build, easier to deploy (copy new binary, service restart), the code is simpler, and the system is more reliable. Mono has been a pain for us. Random segmentation faults, weird bugs, and compatibility issues have always given us grief, not to mention it's excessive size and complexity. We've had no problems with the Go rewrite. </p>
<p>I could have taken lessons learned from the first system and applied them to a second system written in C#. I fully expect such a system would have been a much better as well. That said, we hit it so far out of the park with the Go rewrite that I am fully confident we made the right choice and very much look forward to using it again in the future.</p>
<p>I also feel Go's "lack of features" helped us keep the code simple and clean. We didn't get fancy with generics, OO, or any other esoteric feature because we couldn't. The code is simple, it does what it does and nothing more. Read it from top to bottom and you'll have a pretty good understanding what is going on. I've had no problem teaching other developers how it works, even those completely unfamiliar with the language.</p></pre>Gacnt: <pre><p>You wouldn't have any sort of documentation on how you manage your servers do you? I'm looking to make a video game service that hosts servers it's currently in Node but I'd like to recreate it in golang</p></pre>akcom: <pre><p>What did you use to replace RabbitMQ? NATS?</p></pre>bmurphy1976: <pre><p>Channels and goroutines with the aforementioned REST api around it. It's not as "robust" as RabbitMQ (i.e. we can't cluster the system, yet) but we never really needed that. I designed it with the full intention of plugging the core event loop into a RAFT library at some point in the future when time allows, so I'm not too worried about that. </p>
<p>We've been running the system in production for months now and have yet to lose any production data to a software bug. Eventually we will have hardware failure, but we have enough monitoring and auditing that I'm not worried about that. Clustering/failover is a nice to have for us, not a necessity. For us it's more important to make more optimal usage of the 100's of servers we run in order to keep costs down.</p></pre>akcom: <pre><p>Thank you for the reply, great to hear your thought process!</p></pre>tv64738: <pre><p>I'm writing a distributed weakly connected filesystem: <a href="https://bazil.org/">https://bazil.org/</a></p></pre>jtsylve: <pre><p>We're writing high performance digital forensic software in Go. It's useful for way more than just web servers. </p></pre>THEHIPP0: <pre><p>Command line tools. Easy to cross-compile. Fast to write.</p></pre>fortyninezeronine: <pre><p>Data storage, analysis, and on-demand reporting (as well as an http server, hah).</p></pre>sajal: <pre><p><a href="https://pulse.turbobytes.com/" rel="nofollow">https://pulse.turbobytes.com/</a> - Sure the http server is also written in Go, but so is the code that runs on each test agent(typically a Raspberry pi) and also the server that co-ordinates the tests.</p></pre>burning1rr: <pre><p>Hashicorp shifted pretty much all of their development to golang following the release of veewee. They have the following products out:</p>
<ul>
<li>packer, a platform agnostic virtual machine build tool.</li>
<li>consul, a service discovery tool.</li>
<li>serf, a message passing service</li>
<li>vault, a secret server</li>
<li>terraform, a platform agnostic pluggable infrastructure as data tool</li>
<li>atlas, a continuous delivery system</li>
</ul></pre>010a: <pre><p>A (not-so-standards-compliant) javascript interpreter using nex and yacc. I might open source it one day. </p>
<p>Ironically, while everyone loves using it for http servers, I find Go to be down there with Java on my list of languages I want to write a web server in. </p></pre>howeman: <pre><p>I've used it in my research. First, exploring the use of machine learning to construct physical models from available data, and now I'm looking at advanced function optimization techniques.</p></pre>gohacker: <pre><p>Cryptocurrency trading bots.</p></pre>akcom: <pre><p>Currently working on a program which will use support vector machine learning to predict physician sub-specialty based on prescribing trends</p></pre>qcoh: <pre><p>I'm writing a small IRC client, <a href="https://i.imgur.com/2zhZPRz.png" rel="nofollow">here's a screenshot</a>. In order to maintain my sanity, I'm using termbox-go. :)</p></pre>barnybug: <pre><p>I've an entire home automation system written in go: from sensor data collection, security system, alerting (jabber, Twitter) and a lot more: <a href="https://github.com/barnybug/gohome/" rel="nofollow">https://github.com/barnybug/gohome/</a></p></pre>THUNDERGROOVE: <pre><p>I've written lots of command line tools with Go.</p>
<p>I have one project that parses chat logs saved from a game to search for various keywords/all messages from a player/etc.</p>
<p>Another that takes a database file that a game provides that contains data about each item. It migrates it out of the database into an <code>encoding/gob</code> file to be loaded later for faster access of data. It has several flags for querying data and even includes a lua interpreter with modules for looking up data and working with it.</p>
<p>Another is a bot for Slack that has it's own system for users to report actions and provide statistics. You can do all kinds of stuff with Go!</p></pre>
So far it seems like the majority of this subreddit uses golang for http servers. Is anybody working on any sort of neat other stuff with the language?
polaris · · 1324 次点击这是一个分享于 的资源,其中的信息可能已经有所发展或是发生改变。
入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889
- 请尽量让自己的回复能够对别人有帮助
- 支持 Markdown 格式, **粗体**、~~删除线~~、
`单行代码`
- 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
- 图片支持拖拽、截图粘贴等方式上传