go語言基礎語法

2022-10-11 09:51:09 字數 4898 閱讀 1586

由菜鳥教程中做的筆記

package main

import "fmt"

func main() 

第一行** package main 定義了包名。你必須在原始檔中非注釋的第一行指明這個檔案屬於哪個包,如:package main。package main表示乙個可獨立執行的程式,每個 go 應用程式都包含乙個名為 main 的包。

下一行 import "fmt" 告訴 go 編譯器這個程式需要使用 fmt 包(的函式,或其他元素),fmt 包實現了格式化 io(輸入/輸出)的函式。

下一行 func main() 是程式開始執行的函式。main 函式是每乙個可執行程式所必須包含的,一般來說都是在啟動後第乙個執行的函式(如果有 init() 函式則會先執行該函式)。

下一行 /*...*/ 是注釋,在程式執行時將被忽略。單行注釋是最常見的注釋形式,你可以在任何地方使用以 // 開頭的單行注釋。多行注釋也叫塊注釋,均已以 /* 開頭,並以 */ 結尾,且不可以巢狀使用,多行注釋一般用於包的文件描述或注釋成塊的**片段。

下一行 fmt.println(...) 可以將字串輸出到控制台,並在最後自動增加換行字元 \n。 

使用 fmt.print("hello, world\n") 可以得到相同的結果。 

print 和 println 這兩個函式也支援使用變數,如:fmt.println(arr)。如果沒有特別指定,它們會以預設的列印格式將變數 arr 輸出到控制台。

當識別符號(包括常量、變數、型別、函式名、結構字段等等)以乙個大寫字母開頭,如:group1,那麼使用這種形式的識別符號的物件就可以被外部包的**所使用(客戶端程式需要先導入這個包),這被稱為匯出(像物件導向語言中的 public);識別符號如果以小寫字母開頭,則對包外是不可見的,但是他們在整個包的內部是可見並且可用的(像物件導向語言中的 protected )。

1、go 語言的字串可以通過 + 實現

3、 // %d 表示整型數字,%s 表示字串   fmt.sprintf 格式化字串並賦值給新串

var stockcode=123

var enddate="2020-12-31"

var url="code=%d&enddate=%s"

var target_url=fmt.sprintf(url,stockcode,enddate)

fmt.println(target_url)

4、定義變數 (宣告什麼型別)

// 沒有初始化就為零值

var b int

fmt.println(b)

// bool 零值為 false

var c bool

fmt.println(c)

數值型別為0 布林型別為false 字串為"" (空字串 )其他的型別一般是nil 

5、定義變數(不宣告什麼型別)根據值自行判定變數型別

6、定義變數(使用:=確定變數型別並賦值)

var f string = "runoob" 簡寫為 f := "runoob";

因此

var intval int 

intval :=1 // 這時候會產生編譯錯誤,因為 intval 已經宣告,不需要重新宣告

因此

出現在 := 左側的變數不應該是已經被宣告過的,否則會導致編譯錯誤
只能被用在函式體內,而不可以用於全域性變數的宣告與賦值。使用操作符 := 可以高效地建立乙個新的變數,稱之為初始化宣告。

7、宣告全域性變數

// 這種因式分解關鍵字的寫法一般用於宣告全域性變數

var (

vname1 v_type1

vname2 v_type2

)

8、多變數宣告

var c, d int = 1, 2

9、值型別和引用型別

int、float、bool 和 string 這些基本型別都屬於值型別  這個時候複製是將值進行拷貝

引用型別是= 只是引用

10、定義語言常量

11、在定義常量組時,如果不提供初始值,則表示將使用上行的表示式。

const (

a = 1bc

d)func main()

12、iota 只是在同乙個 const 常量組內遞增,每當有新的 const 關鍵字時,iota 計數會重新開始。

const (

i = iota

j = iota

x = iota

)const xx = iota

const yy = iota

func main()

// 輸出是 0 1 2 0 0

13、左移右移

左移運算子 << 是雙目運算子。左移 n 位就是乘以 2 的 n 次方。 其功能把<<左邊的運算數的各二進位全部左移若干位,由<<右邊的數指定移動的位數,高位丟棄,低位補 0。

右移運算子 >> 是雙目運算子。右移 n 位就是除以 2 的 n 次方。 其功能是把>>左邊的運算數的各二進位全部右移若干位,>>右邊的數指定移動的位數。

14、運算子

運算子和其他語言類似

& 返回變數儲存位址,&a給出變數的實際位址

*指標變數,*a是乙個指標變數

15、for迴圈

第一種型別

for i := 0; i <= 10; i++ 

第二種型別

省略兩個值

for ; sum <= 10; 

簡化後  (這時候就吧比較類似while語句了)

for sum <= 10 

第三種型別

無限迴圈

for 

第四種型別

for-each range 迴圈

strings := string

for i, s := range strings 

numbers := [6]int 

for i,x:= range numbers   

0 google

1 runoob

第 0 位 x 的值 = 1

第 1 位 x 的值 = 2

第 2 位 x 的值 = 3

第 3 位 x 的值 = 5

第 4 位 x 的值 = 0

第 5 位 x 的值 = 0

第一值從0開始迭代遞增

第二個值是直到末尾

16、break語句

跳出迴圈,繼續執行剩下的語句

17、continue語句

跳出本次迴圈,執行下一次迴圈

18、語言函式

func 函式名(引數列表)返回型別 

a, b := swap("google", "runoob")  //呼叫的時候賦值給a和b

19、* 和&再次梳理

*代表的是取這個對應的值 比如 *a 是取a的位址裡面的值

&代表取位址 &a 是取a的位址 

定義 *a int ; a是指標變數,專門用於存放位址

&需要與*配合使用,

1、如果p是int *指標變數,那麼*&p = p,&*p = p,都是p,但還沒定義p指向哪,存的是誰的位址。 由於p是指標變數,那麼它存放的資料就是正確的某個值的位址,這時候是合法的

2、如果p是乙個int變數,那麼*&p = p;而&*p是非法的,因為*p非法。

這裡p僅是乙個正常的變數,p指代的位址是不合法的,因此不能*p,這樣是非法的

20、函式引用傳遞值

func swap(x *int, y *int) {}

呼叫 swap(&a, &b)

21、陣列宣告

var balance [10] float32
22、初始化陣列

var balance = [5]float32
簡化後

balance := [5]float32
陣列長度不確定,使用...代替陣列長度,編譯器會根據元素個數自行推斷陣列的長度:

var balance = [...]float32
如果設定了陣列的長度,我們還可以通過指定下標來初始化元素:

//  將索引為 1 和 3 的元素初始化

balance := [5]float32

如果忽略  中的數字不設定陣列大小,go 語言會根據元素的個數來設定陣列的大小:

balance[4] = 50.0
切片的初始化

s := arr[:] 初始化切片 s,是陣列 arr 的引用。

s := arr[:endindex] 預設 startindex 時將表示從 arr 的第乙個元素開始。 

二維陣列初始化

a := [3][4]int ,   /*  第一行索引為 0 */

, /* 第二行索引為 1 */

, /* 第三行索引為 2 */

}

23、go語言指標暫時不加以展開

24、go語言結構體

type books struct 

// 建立乙個新的結構體  對於沒有初始化的字段會預設為0或者空

fmt.println(books)

// 也可以使用 key => value 格式

fmt.println(books)

var book1 books

訪問結構體成員  book1.book_id

問題 陣列

指標26、go語言切片

27、go不支援隱式轉換型別,只支援顯示轉換型別

mean = float32(sum)/float32(count)

GO語言基礎語法

語言變數 go語言的語言符號又稱記法元素,共包括5類,標籤符 identifier 關鍵字 keyword 操作符 operator 分隔符 delimiter 字面量 literal 它們是組成go語言 和程式的最基本單位。go語言的所有源 都必須由 unicode 編碼規範的 utf 8 編碼格...

Go 語言基礎語法

go 標記 go 程式可以由多個標記組成,可以是關鍵字,識別符號,常量,字串,符號。如以下 go 語句由 6 個標記組成 fmt.println hello,world 6 個標記是 每行乙個 1.fmt 2.3.println 4.5.hello,world 6.行分隔符 在 go 程式中,一行代...

Go 語言基礎語法

上一章節我們已經了解了 go 語言的基本組成結構,本章節我們將學習 go 語言的基礎語法。go 程式可以由多個標記組成,可以是關鍵字,識別符號,常量,字串,符號。如以下 go 語句由 6 個標記組成 fmt.println hello,world 6 個標記是 每行乙個 1.fmt 2.3.prin...