他與另外一位Dennis Ritchie設計了B語言以及C語言,也創造了unix作業系統!!
B語言是什麼?B語言就是C語言的前身
Dennis Ritchie是誰,他可是著名的C語言之父欸!這世界如果沒有Dennis Ritchie與Ken Thompson創造出C語言,我們應該在寫組譯語言吧XD
不過Ken Thompson在Google工作可能也是遲早的吧!不過當初的貝爾實驗室培育出了許多人才的搖籃啊!
以上都是題外話,相信這次Ken Thompson設計的Go語言能夠改變現今的程式語言風潮,以下是2013程式語言前十名的排行榜
雖然Go語言沒有在前十名內,不過我仍看好Go語言未來的影響力!大牛出手,一定支持!
Go語言是在2007年由Google所開始設計的語言,在2009年轉為正式版本,且為開源的專案
Go語言是一種編譯以及平行處理,並具備垃圾處理功能的程式語言,不過Go語言寫法很雷同於C語言,但有些地方以及規範又跟C語言很不一樣,其For迴圈就會在本文的範例出現,你可以深刻體會到彼此的不同。
而且Go語言對於垃圾處理的機制又特別去優化,且Go語言的平行處理模型是以Tony Hoare的CSP作為基礎
該篇文章以『How to Write Go Code』作為程式碼範例
根據『How to Write Go Code』文內的這段話得知,須在開發資料夾底下具備src和pkg與bin
Go code must be kept inside a workspace. A workspace is a directory hierarchy with three directories at its root:
src
contains Go source files organized into packages (one package per directory),pkg
contains package objects, andbin
contains executable commands.
src是拿來放原始碼的
pkg是類別的物件
bin則是可執行的命令
看完這段後,先將Go語言下載下來,在這邊我是以『go1.2rc1 Mac OS X (x86 64-bit) PKG installer』當做示範
下載下來之後,一直點繼續即可XD
安裝完成,先輸入以下的指令:
mkdir $HOME/go
mkdir $HOME/go/src $HOME/go/bin $HOME/go/pkg
export GOPATH=$HOME/go
export PATH=$PATH:$GOPATH/bin
接著輸入
mkdir $GOPATH/usr/demo/hello
vim $GOPATH/usr/demo/hello/hello.go
並將程式碼填入hello.go:
package main
import "fmt"
func main(){
fmt.Printf("Hello, world\n");
}
import就像C語言的include,將標頭檔或函式庫導入
import "fmt"
我們來了解一下fmt的函式庫說明吧!
fmt有實作C語言中的I/O函式庫,有以下這幾種方法
func Errorf(format string, a ...interface{}) error
func Fprint(w io.Writer, a ...interface{}) (n int, err error)
func Fprintf(w io.Writer, format string, a ...interface{}) (n int, err error)
func Fprintln(w io.Writer, a ...interface{}) (n int, err error)
func Fscan(r io.Reader, a ...interface{}) (n int, err error)
func Fscanf(r io.Reader, format string, a ...interface{}) (n int, err error)
func Fscanln(r io.Reader, a ...interface{}) (n int, err error)
func Print(a ...interface{}) (n int, err error)
func Printf(format string, a ...interface{}) (n int, err error)
func Println(a ...interface{}) (n int, err error)
func Scan(a ...interface{}) (n int, err error)
func Scanf(format string, a ...interface{}) (n int, err error)
func Scanln(a ...interface{}) (n int, err error)
func Sprint(a ...interface{}) string
func Sprintf(format string, a ...interface{}) string
func Sprintln(a ...interface{}) string
func Sscan(str string, a ...interface{}) (n int, err error)
func Sscanf(str string, format string, a ...interface{}) (n int, err error)
func Sscanln(str string, a ...interface{}) (n int, err error)
type Formatter
type GoStringer
type ScanState
type Scanner
type State
type Stringer
有興趣可以研究一下,接著輸入指令:
go run $GOPATH/usr/demo/hello
就會出現Hello, world了!
以上只是我們的第一隻程式而已喔,接下來要教的是寫第一個函式庫,先輸入以下指令:
mkdir $GOPATH/usr/demo/newmath
vim $GOPATH/usr/demo/newmath/Sqrt.go
將以下程式碼輸入到Sqrt.go內
package newmath
func Sqrt(x float64) float64{
z := 1.0
for i :=0; i < 1000; i++ {
z -= (z*z - x) / (2 * z)
}
return z
}
輸入以下指令去build sqrt
go build $GOPATH/src/demo/newmath/sqrt.go
小修改一下剛剛的hello.go
package main
import (
"fmt"
"demo/newmath"
)
func main(){
fmt.Printf("2 Sqrt is %v\n", newmath.Sqrt(2));
}
接著輸入
cd $GOPATH/src
輸入go install將hello安裝到lib
go install demo/hello
並執行hello,就可以看得到新的結果啦!
$GOPATH/bin/hello
Go語言在學習方便是有點像Ruby或Python等語言的易學性,等待後續的支持以及維護有可能會讓這個語言爆紅!
參考資料:
http://golang.org/doc/code.html
http://zh.wikipedia.org/wiki/Go
http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html
圖片參考:
http://www.tiobe.com/content/paperinfo/tpci/images/tpci_trends.png