go學習筆記0-helloWorld

有一次聽一個沙龍技術演講,講師說go是互聯網時代的c,聽了詳細介紹之後感受很贊,尤爲是並行層面真正在語言層面上作了控制及特殊的內存管理機制等。。。 php

 

 

好吧,下面上先上helloWorld代碼。(之後系列的博客也是以代碼爲主) java

 

 

package main //這個是必須的,全部的go文件必須以 package開頭

import "fmt"  // 」fmt「是go必需要引入格式化I/O的庫。若是要引入多個庫import用(  )號包裹全部的庫。例如 import ( 「fmt」 「strconv」)

func main() {    //這是主函數
	fmt.Printf("hello world!")// fmt的Print()函數用於打印
}

 

 

這是最簡單的一個go程序。 python

 

 

關於go程序的編譯跟執行筆者是再win7 64bit機器用的LiteIDE工具,LiteIDE是由國人開發的一款go編譯執行開發環境,用起來感受挺不錯的。第一次編譯執行go程序須要配置工具的LiteEnv(主要是配置golang下載解壓後的目錄) linux

 

 

下面說一下go的一些變量定義: c++

 

go語言與其餘語言不通的地方就是在變量類型放在變量後邊 以下: golang

 

var i int; 編程

var j bool; 併發

給i跟j賦值 app

 

i=10; jvm

j=true;

 

若是要定義不少變量會須要些 var,go也能夠這樣定義變量 以下:

var(

  i int

  j bool

 

golang還有本身的簡便寫法 變量名:=值  這種方式go會自動根據值定義其類型 以下:

i:=10;

j:=true;

 

go的int 類型根據硬件他們的長度是不一樣的,會分文int32 int64 。int int32 int64定義的變量是不能夠直接賦值的。須要轉換類型。

 

 

我的總結起來golang的幾大優勢:

 

   1,簡潔,go代碼很簡潔,能在短短的幾行代碼裏作不少東西。代碼簡潔致使了代碼更清晰。對比筆者吃飯用的java來講,減小了不少冗餘,畢竟java是以方法爲單元的,不免會有冗餘。

   2,併發控制好,go再os層面上獨自封裝了一層叫gorountines的輕量線程,由語言層面進行了併發控制,其餘語言來講java也只是在語言層面上作了synchronized加鎖控制。雖然java運行在jvm裏,但實際上也沒有脫離os層面,jvm也會調用os層面的線程。另外筆者熟悉的php,python等也有一些附加的線程庫來寫併發程序,實際也是調用os層面線程的模型。gorountines是一個輕量的線程,一秒切換的速度是遠遠快於線程的。

   3,gorountines之間通信交換數據要用channel完成。golang的併發模型是從新設計的。以前的語言例如java是經過共享來通信(經過分享一段內存,各個內容之間經過加鎖進行控制,這樣根據加鎖力度會形成程序複雜度會不一樣),golang是經過經過通信來共享的,每一個並行單元只管理本身的內容,意思是說,在gorountines之間根本就不用顯示的進行加鎖控制,並且強制通信成本變低,這樣通信速度就會加快。還有channel是阻塞的。跟c的串行編程思想是一致的。由於channel是阻塞的,因此除了通信功能以外,還能夠用來作同步。(讀阻塞,寫阻塞)

 4.再就是編譯速度快,另外想說的是golang有很嚴格的規則,若是go程序裏引入了沒有用到的庫,或者定義了一個程序裏沒有用到的變量,程序是編譯不過去的。可是go的錯誤提示會很詳細。

5.變量定義類型是定義在後面 這跟以前的不少大衆語言都不同,致使筆者常常犯這個錯誤,舉例:var str string;

6.go簡化並行開發有GC參與其中,這就不用關注須要關閉哪些變量,go會自動幫你作這些工做。相似java,解決c c++程序開發過程最常常用碰到的內存泄露問題。

7.另外go的全部編碼都是基於Utf-8的。官方宣傳視頻講寫go程序會很happy,go用起來的感受更像linux。。

 

 

 

下一講會用代碼的方式講golang的控制語言,一些經常使用的go函數等。

(若是有寫的不對的地方,但願看見能指出來,每週更新2篇博文,但願你們能監督,共同進步)

相關文章
相關標籤/搜索