Effective Go中文版(更新中)

原文連接:https://golang.org/doc/effective_go.htmlhtml

Introduction

  Go是一種新興的編程語言。雖然它借鑑了現有語言的思想,但它具備不一樣尋常的特性,使得高效的Go程序與其餘語言編寫的程序大不相同。將C ++或Java程序直接轉換爲Go不太可能產生使人滿意的結果 - Java程序是用Java編寫的,而不是Go。另外一方面,從Go語言的角度思考問題可能會產生一個成功但徹底不一樣的程序。換句話說,要寫好Go,瞭解它的特性和語法是很重要的。瞭解Go中編程的既定約定也很重要,例如命名,格式化,程序構造等,這樣你編寫的程序將很容易讓其餘Go程序員理解。程序員

  該文檔提供了編寫清晰,經常使用的Go代碼的技巧。 Language specificationTour of GoHow to Write Go Code,這些都應該先閱讀。golang

Formatting(格式化)

  格式化問題是最具爭議性但最不重要的問題。人們能夠適應不一樣的格式化風格,但若是不是勉強去適應代碼風格,那就更好了,若是每一個人都遵循相同的風格,那麼關注在格式化上的時間就會減小。問題在於如何可以長期在沒有規定風格的狀況下達到這個理想的狀況。express

  使用Go,咱們採起了一種不尋常的方法,讓機器處理大多數格式問題。gofmt程序(也可做爲go fmt,在包級別而不是源文件級別運行)讀取Go程序並以標準樣式的縮進和垂直對齊方式格式化源代碼,並在必要時從新格式化註釋。若是你想知道如何處理一些新的佈局狀況,請運行gofmt;若是結果彷佛不正確,從新整理你的程序(或提交有關gofmt的錯誤),沒必要糾結於此。編程

  例如,沒有必要花時間排列結構體中字段的註釋。Gofmt會去作的。給出結構體的聲明:服務器

type T struct {
    name string // name of the object
    value int // its value
}

  gofmt會格式化爲:編程語言

type T struct {
    name    string // name of the object
    value   int    // its value
}

  標準包中的全部Go代碼都已經使用gofmt格式化過了。一些格式細節仍然存在,很是簡短:佈局

  1. 縮進:咱們使用tab進行縮進,gofmt默認使用的就是tab。僅在必要時使用空格。
  2. 每行的長度:Go中對每行的長度沒有限制,別擔憂打孔卡不夠長。若是一行實在太長,能夠換行而後使用tab進行縮進。
  3. 括號:Go中的括號要比C和Java少,控制結構(if,for,switch)的語法中沒有括號。此外,運算符優先級層次更短更清晰,所以在x<<8 + y<<16中間距說明了優先級,這與其餘語言是不一樣的。

Commentary(註釋)

  Go中支持C語言風格的/* */分段註釋和C++風格的//行註釋。一般使用的是行註釋;段註釋主要用在package的註釋,但在表達式中或禁用大量代碼時頗有用。code

  程序和Web服務器-godoc處理Go源文件以提取有關package內容的文檔。出如今聲明以前的註釋(註釋與聲明之間沒有插入新的行)將與聲明一塊兒提取,做爲項目的解釋性文本。這些註釋的風格決定了godoc產生文檔的質量。regexp

  每一個package在最開始都應該有一個段註釋。對於多文件package,package註釋只須要寫在一個文件中,任何一個均可以。package的註釋應該介紹package,並提供與整個package相關的信息。它將首先出如今godoc頁面上,應該創建以下所示的詳細文檔。

/*
Package regexp implements a simple library for regular expressions.

The syntax of the regular expressions accepted is:

    regexp:
        concatenation { '|' concatenation }
    concatenation:
        { closure }
    closure:
        term [ '*' | '+' | '?' ]
    term:
        '^'
        '$'
        '.'
        character
        '[' [ '^' ] character-ranges ']'
        '(' regexp ')'
*/
package regexp

  若是package很簡單,那麼package的註釋能夠很簡短。

// Package path implements utility routines for
// manipulating slash-separated filename paths.

  

Names(命名)

 

Semicolons(分號)

相關文章
相關標籤/搜索