偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

探索Google Go語言(一)

開發(fā) 前端
本文不是教程,本身只是為了讓大家對Google Go語言有進一步的了解。極力維持語言特性的簡潔,力求小而精,越深入go,你就會發(fā)現(xiàn)go真的是太簡潔了。

看到網(wǎng)上有些人說Go是python 4.0,對此看法,我不敢茍同。從本質(zhì)上講,這兩個是完全不同的語言。go是靜態(tài)型編譯語言,python是動態(tài)型解釋語言(腳本語言);go的執(zhí)行速度屬于微秒級,可精確到納秒,而python屬于毫秒級,根本無法比;go完全支持指針,python不支持,只有引用。閑話不多說,下面就來看看go長得啥樣子。如果你有C/C++,JAVA,C#,python等語言基礎,對linux有些了解,我相信你一定會很快會對go有初步了解。

  老規(guī)矩,先來個hello world。

  hello.go

  1. package main //聲明本文件的package名    
  2. import "fmt" //import語言的fmt庫——用于輸出    
  3. func main() { 
  4.   var str string = "hello world" 
  5.   //str := "hello world" 
  6.   //var str = "hello word" 
  7.    fmt.Println(str)  
  運行

  有兩種方式可以解釋運行

  1、先編譯:go build hello.go

    再運行:./hello

  2、也可以直接進行編譯運行(其實下面這個命令實際是編譯成hello.out再執(zhí)行):go run hello.go

  對于習慣了C系列語言的同學來說,會對go的語法很不習慣。***,go沒有使用“;”作為語句結束標志;第二,go是變量在類型前面,變量初始化還可以如注釋的那兩行語句,不用指定類型,go編譯器可以從初始化表達式的右值導出該變量應該聲明為哪種類型,這讓go看起來有點像動態(tài)語言,這也可能為什么有人說它是python 4.0的原因吧。

  go很可能是***個將代碼風格進行強制統(tǒng)一的語言,例如go語言要求public的變量名必須以大寫字母開頭,private變量則以小寫字母開關,這種做法不僅免除了public,private關鍵字,更重要的是統(tǒng)一了風格。還有,對于判斷語句,如果你寫成這樣:

  1. if str == "descur"
  2.     .... 
  3. else
  4.     .... 

是不能編譯通過的,一定要寫成這樣:

  1. if str == "descusr"
  2.     ... 
  3. }else
  4.     ... 

這可能對那些在微軟懷抱中長大的孩子來會很痛苦,但對像我這些有代碼潔癖的人來說未嘗不是好事。其實統(tǒng)一了代碼風格,進行團隊合作時是很有益的。

編程哲學

  C語言是純過程式的,這和它產(chǎn)生的歷史背景有關。C#/JAVA語言則是高度的面向?qū)ο笳Z言,典型表現(xiàn)是它們的體系里不存在孤立的方法,這些方法必須是屬于某個類。而go沒有去否認任何一方,而是用批判吸收的眼光,綜合了各種編程思想,融合眾家之長,極力維持語言特性的簡潔,力求小而精,越深入go,你就會發(fā)現(xiàn)go真的是太簡潔了。

  從編程范式的角度看,go是變革派,不是改良派。

  雖然go屬于面向?qū)ο笳Z言,但在go的概念里沒有面向?qū)ο筮@個概念,只有結構體。go的類具有高度的粒子性,如下面的代碼:

  1. type rect struct { 
  2.       width, height int 
  3.  } 
  4.   
  5.  func (r *rect) area() int { //求面積 
  6.       return r.width * r.height  
  7.  }    
  8.   
  9.  func (r *rect) perimeter() int{ //求周長 
  10.       return 2*(r.width + r.height)  
  11.  }    
  12.   
  13.  func main() { 
  14.       r := rect{width: 10, height: 15
  15.       fmt.Println("面積: ", r.area()) 
  16.       fmt.Println("周長: ", r.perimeter())  
  17.       rp := &r 
  18.       fmt.Println("面積: ", rp.area()) 
  19.       fmt.Println("周長: ", rp.perimeter())  
  20.  } 

類和類方法完全分開,只有在初始化對象后才進行調(diào)用,減少了耦合度。go沒有構造函數(shù)和析構函數(shù)。由于go語言中沒有虛函數(shù),也就沒有vptr,支持構造函數(shù)和析構函數(shù)就沒有太大價值。

  其次,go語言反對函數(shù)和操作符重載,而C#,C++,和JAVA允許同名函數(shù)或者操作符,只要它們的參數(shù)列表不同。雖然重載解決了一小部分OOP問題,但卻給這些語言帶來了極大的負擔,并且這種方法對解決問題問題并沒有帶來多大價值,所以go就不提供重載。

  再次,go反對繼承,反對虛函數(shù)和虛函數(shù)重載。其實,go也提供了繼承,只不過采用了組合的方法來提供:

  1. type Car struct{ 
  2.      Base 
  3.      ... 
  4.  } 
  5.   
  6.  func (color *Car) Drive(){ 
  7.      ... 
  8.  } 
  放棄了大量的OOP特性后,go提供了一份相當棒的功能:接口。你可能會有疑問,所有面向?qū)ο笳Z言也有接口???但那些面向?qū)ο笳Z言的接口都基本上一樣,而go的卻跟它們不一樣。

  go語言中的接口與其他語言***的一點區(qū)別是它的非侵入性。在C#等面向?qū)ο笳Z言中,為了實現(xiàn)接口,你需要從接口繼承,如:

  1. public interface IBankAccount 
  2.     void PayIn(decimal amount); 
 
  1. class SaverAccount : IBankAccount 
  2.  
  3.     public void PayIn(decimal amount) 
  4.     { 
  5.         Console.WriteLine("This is PayIn"); 
  6.     } 
  7.  

在go語言中,實現(xiàn)類的時候無需從接口派生,如:

  1. type SaverAccount  struct{   //go 
  2.     ... 
  3.  
  4. var saveAccount IBankAccount = new(SaveAccount) 

只要實現(xiàn)了IBankAccount要求的所有方法,就實現(xiàn)了該接口,可以進行賦值,相當原子性。

原文鏈接:http://www.cnblogs.com/descusr/archive/2012/11/07/2759575.html

【編輯推薦】

責任編輯:彭凡 來源: 博客園
相關推薦

2011-01-05 10:58:05

Google Go

2023-11-30 08:09:02

Go語言

2009-12-10 10:33:09

Go語言

2012-07-06 13:16:37

Google Go

2018-03-12 22:13:46

GO語言編程軟件

2010-08-10 15:13:11

GoGoogle

2010-10-13 10:47:52

GoGoogle

2012-03-13 10:40:58

Google Go

2012-08-06 08:50:05

Go語言

2013-07-30 09:27:32

Go云計算語言

2013-07-30 09:23:43

VMwareGoogle云平臺

2009-12-28 09:09:34

Google開源項目

2024-04-07 00:04:00

Go語言Map

2024-03-29 09:12:43

Go語言工具

2009-11-11 10:43:49

Go語言Google

2019-05-15 11:38:22

GoogleGo編程語言

2013-07-30 12:29:19

Google App Google技術Engine

2011-11-14 09:47:20

Google Go

2010-01-11 09:38:28

編程語言排行榜Google Go

2025-06-17 09:32:15

點贊
收藏

51CTO技術棧公眾號