1. 程式人生 > >JAVA轉go系列之 語言基礎

JAVA轉go系列之 語言基礎

     和JAVA語言一樣Go語言也是由多個標記組成,可以是關鍵字,識別符號,常量,字串等等

 java語言

Go

go語言的fmt包就和Java的System一樣都有它強大的功能屬於自帶的包這裡要說一下,System是一個final修飾的類,而fmt是一個包,System點出來的都是靜態的,而Go的fmt是一個包名,go是面向函式(其實也不完全面向函式,我這裡先這樣理解),還有一點go的包的檔案都可以直接修改,java就不行了。初學的時候覺得挺有意思的,覺得程式就因當這樣,程式設計師因當能主導所有的程式碼,java依賴的包不能修改,除非copy整個的程式碼然後打包

基礎語法說完了說一說資料型別吧,有個大佬說過 程式=資料結構+演算法,可以見得資料結構在程式中是多麼的重要,和java類似go的資料型別也分為內建資料型別和引用資料型別

java的內建資料型別 java有8個基本資料型別也就是內建資料型別,這些資料型別是儲存在棧中,所以使用這類資料型別的時候是使用的值傳遞,也就是在使用過程中是不會對原來的資料產生影響。java為這些資料型別都提供了包裝類,就是為了在引數產地過程中可以使用地址傳遞

Go也有提供內建資料型別基本和java差不多,需要注意的是go語言在函式之間傳遞變數時,總是以值傳遞。這點跟java不同,java只要傳遞的是引用型別,就是地址傳遞。go如果需要使用地址傳遞就要顯示宣告一下

變數來源於數學,是計算機語言中能儲存計算結果或能表示值抽象概念。變數可以通過變數名訪問。

Java 變數宣告

在Java語言中,所有的變數在使用前必須宣告。宣告變數的基本格式如下:

type identifier [ = value][, identifier [= value] ...] ;

Go 語言變數名由字母、數字、下劃線組成,其中首個字母不能為數字。

在java中變數的可見性是由修飾符決定的,Go中的可見性是由變數的首字母大小寫來控制的,相比java少寫了很多程式碼。

在java中如果一個變數聲明瞭沒有被使用編譯器會提示警告,在Go中如果一個變數編譯了沒有被使用則編譯錯誤!

 

 語言變數作用域 

作用域為已宣告識別符號所表示的常量、型別、變數、函式或包在原始碼中的作用範圍。

Java 區域性變數

  • 區域性變數宣告在方法、構造方法或者語句塊中;
  • 區域性變數在方法、構造方法、或者語句塊被執行的時候建立,當它們執行完成後,變數將會被銷燬;
  • 訪問修飾符不能用於區域性變數;
  • 區域性變數只在宣告它的方法、構造方法或者語句塊中可見;
  • 區域性變數是在棧上分配的。
  • 區域性變數沒有預設值,所以區域性變數被聲明後,必須經過初始化,才可以使用。

類變數(靜態變數)

  • 類變數也稱為靜態變數,在類中以static關鍵字宣告,但必須在方法構造方法和語句塊之外。
  • 無論一個類建立了多少個物件,類只擁有類變數的一份拷貝。
  • 靜態變數除了被宣告為常量外很少使用。常量是指宣告為public/private,final和static型別的變數。常量初始化後不可改變。
  • 靜態變數儲存在靜態儲存區。經常被宣告為常量,很少單獨使用static宣告變數。
  • 靜態變數在第一次被訪問時建立,在程式結束時銷燬。
  • 與例項變數具有相似的可見性。但為了對類的使用者可見,大多數靜態變數宣告為public型別。
  • 預設值和例項變數相似。數值型變數預設值是0,布林型預設值是false,引用型別預設值是null。變數的值可以在宣告的時候指定,也可以在構造方法中指定。此外,靜態變數還可以在靜態語句塊中初始化。
  • 靜態變數可以通過:ClassName.VariableName的方式訪問。
  • 類變數被宣告為public static final型別時,類變數名稱一般建議使用大寫字母。如果靜態變數不是public和final型別,其命名方式與例項變數以及區域性變數的命名方式一致。

Go 

和java差不多

Go 語言中變數可以在三個地方宣告:

  • 函式內定義的變數稱為區域性變數
  • 函式外定義的變數稱為全域性變數
  • 函式定義中的變數稱為形式引數

總結:go和java的變數作用域差不多,區域性變數和全域性變數名都可以重複,但是使用過程中使用就近原則。

 

語言常量

java中對常量使用修飾符final修飾,被final修飾過得變數都屬於常量,常量只是在編譯中的,編譯器不允許你修改它的值

Go中的常量使用const宣告。僅僅對於變數來說使用差不多

 

語言運算子

  • 算術運算子
  • 關係運算符
  • 邏輯運算子
  • 位運算子
  • 賦值運算子
  • 其他運算子

兩種語言的運算子基本都是這幾種,用法也是差不多!

今天就寫到這裡了,之後的控制流程,條件語句基本和java都差不多主要熟悉就行了,後面會跳過直接寫關於陣列,切片,指標已經結構體