golang: My introduction to the Go programming language

Supermighty · · 1819 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

I recently discovered Go, a new-ish programming language fostered at Google. I jumped right in and wrote a blog engine with it. My background is PHP. I'm used to the fast and loose school of programming. Getting something out there that works and fixing it later. Using Go was a change for me. It was my first time working with a strongly typed language, a compiled language and something closer to C without a lot of OOP stuff baked in.

The syntax of Go is very strict. One little character out of place and the compiler will let you know. At first I found myself stumbling through compiler warnings and errors. The syntax isn't too different than PHP or other C style languages. There are differences in the core theory of some types. Like the difference between an array and a slice. Where an array is statically sized, a slice is a dynamically sized abstraction built on top of an underlying array.

Jump in

I threw myself into learning Go. I setup a DEV instance and just started coding. It wasn't pretty. In fact it was ugly code. But I was able to write code that did what I wanted it to do. I stumbled back and forth learning as I meandered through syntax and code patterns. The online documentation is really good, and help me understand the language and gave me good examples which to mimic.

Along with the many features of the standard library and tools Go has a web server as part of the net/http library. I was able to use this server to serve Go generated content. It listened on a localhost port, and requests were proxied from the front end by Apache. This is a nice way to integrate a Go application server with Apache running static content for existing websites.

Generating content

Go has its own templating language. In text and HTML varieties. The templates are straightforward and easy to understand, however this was my greatest challenge. The Go templateing language contains very little in the way of logic statements or conditional testing. So no if( value == value). The idea is that you make those kinds of decisions in the functions in your application and only send a final data struct to the template to be displayed. They have a boolean "if" statement to check if something exist or doesn't. But there is no built-in way to check a value or see if it is greater or smaller or make a decision on whether to display it.

For templates you can create filters, which are functions that a template can call that act on the current data structure. Instead of the template checking a userType number to see if it is greater than the access needed for an action you would create a filter that would check the value-and then return a data value to the template.

I created a filter to check for "" (more) in the blog body and to cut off output in the template. This is used on pages with multiple posts where we want to only show a summary and not the whole blog post.

The Go way of things

The philosophy of Go is small, simple and direct. It's not quite the same as Python's "only one way to do it" statement, but it's along those lines. Go wants to be it small and not clutter developers mind with too many things. They don't have a "do" or "while" loop. Instead they suggest the use of a "for" loop.

Go is opinionated. There is one way you should format your code, and that there is a code formatting tool that makes it easy to do so. It's philosophy that we should write code correctly not just for today, but we should also be doing it correctly for tomorrow. With PHP there are a ton of ways to format your source and every developer has a different opinion on what that is. But it doesn't matter with go. That's not part of the conversation any more. Everyone formats code the same way and moves on.

Go works for me. I can edit, compile, and test just about as fast as I could with PHP, and I get the added benefits of static types, direct syntax and fast compiled code. It has some idioms and quirks that will take some time getting used to, but I was productive faster than I expected—without having any background in C or C++.


有疑问加站长微信联系(非本文作者)

本文来自:Walled City

感谢作者:Supermighty

查看原文:golang: My introduction to the Go programming language

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1819 次点击  
加入收藏 微博
上一篇:2:GO基础知识
下一篇:Golang vs PHP
0 回复
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传