GO語言基礎語法

2021-08-21 01:38:07 字數 4917 閱讀 5145

語言變數

go語言的語言符號又稱記法元素,共包括5類,標籤符(identifier)、關鍵字(keyword)、操作符(operator)、分隔符(delimiter)、字面量(literal),它們是組成go語言**和程式的最基本單位。

go語言的所有源**都必須由 unicode 編碼規範的 utf-8 編碼格式進行編碼。

break

default

func

inte***ce

select

case

defer

gomap

struct

chan

else

goto

package

swith

const

fallthrough

ifrange

type

continue

forimport

return

var

1. 程式宣告:import、package

2. 程式實體宣告和定義:chan、const、func、inte***ce、map、struct、type、var

3. 程式流程控制:go、select、break、case、continue、default、defer、else、fallthrough、for、goto、if、range、return、switch

在go語言**中,每乙個識別符號可以代表乙個變更或者乙個型別(即識別符號可以被看作是變數或者型別的代號或者名稱),識別符號是由若干字母、下劃線(_)和數字組成的字串行,第乙個字元必須為字母。同時,使用乙個識別符號在使用前都必須先宣告。在乙個**塊中,不允許重複宣告同乙個標識。

**包宣告(package pkg_name)並不算是乙個宣告,因為**包名稱並不出現在任何乙個作用域中,

**包宣告語句的目的只是為了鑑別若干原始碼檔案是否屬於同乙個**包,或者指定匯入**包時的預設**包引用名稱。

乙個限定識別符號代表了對另乙個**包中的某個識別符號的訪問,這需要兩個條件:

1.另乙個**包必須事情由go語言的匯入宣告 import 匯入;

2.某個識別符號在**包中是可匯出的。

識別符號可匯出的前提條件有下面這兩個:

1.識別符號名稱中的第乙個字元必須是大寫;

2.標識必須是被宣告在乙個**包中的變數或者型別的名稱,或者是屬於某個結構體型別的欄位名稱或者方法名稱。

bool

byte

capclose

copy

recover

false

true

panic

print

println

iota

lenmake

newnil

real

intint8

int16

int32

int64

string

uint

uint8

uint16

uint32

uint64

uintprt

complex

complex64

complex128

float32

float64

imag

==18個基本資料型別:==

string 、bool、byte、int/uint、int8/uint8、int16/uint16、int32/uint32、int64/uint64、float32、float64、complex、complex64、complex128,基本型別的名稱都必須預定義識別符號。除了 bool 與 string 外,其它的都稱為數值型別。

大類序號

型別描述整型1

uint8

無符號8位整形(0到256) // 2的8次方(1位元組,8位乙個位元組)

2uint16

無符號16位整形(0到65535) // 2的16次方

3uint32

無符號32位整形(0到4294967295) // 2的32次方

4uint64

無符號64位整形(0到18446744073709651615) // 2的64次方

5int8

有符號8位整形(-128到127)

6int16

有符號16位整形(-32758到32767)

7int32

有符號32位整形(-2147483648到2147483647)

8int64

有符號64位整形(-9223372036854775808到9223372036854775807)浮點1

float32

1eee-754 32位浮點型數 (4位元組)

2float32

1eee-754 64位浮點型數 (8位元組)複數1

complex64

32位實數和虛數

2complex128

64位實數和虛數其他1

byte

類似uint8

2rune

類似int32

3uint

32位或64位(根據作業系統來,32位作業系統佔4位元組,64位作業系統佔8位元組)

4int

與uint一樣大小(根據作業系統來,32位作業系統佔4位元組,64位作業系統佔8位元組)

5uintptr

無符號整型,用於存放乙個指標

6string

==字串型別string,編碼統一為「utf-8」==

7bool

布林型別,值為常量true或false

- string型別預設為空值(空字串)

- bool型別預設為false

- 數值型別預設為0

==8個復合型別:==

array(陣列)、struct(結構體)、function(函式)、inte***ce(介面)、slice(切片)、map(字典)、channel(通道)以及pointer(指標)。

復合型別一般由若干(包括0)個其他已被定義的型別組合而成,如定義一本書的結構體:

type

book struct

go語言中的型別又可以分為靜態型別和動態型別,乙個變數的靜態型別是指在變數宣告中示出的那個型別,絕大多數型別的變數都只擁有靜態型別,唯獨介面型別的變數例外,它除了擁有靜態型別之外,還擁有動態型別,這個動態型別代表了在執行時與該變數繫結在一起的值的實際型別。

每乙個型別都會有乙個潛在型別,如果這個型別是乙個預定義的型別(也就是基本型別),或者是乙個由型別字面量構造的復合型別,那麼它的潛在型別就是它自身,比如 string 型別的潛在型別就是 string,在上面提到的 book 的潛在型別就是 book,但是如果乙個型別並不屬於上述情況,那麼這個型別的潛在型別就是在型別宣告中的那個型別的潛在型別,比如我們按以下方式宣告乙個 mystring 型別:

type mystring string

mystring 型別的潛在型別就是 string 型別的潛在型別,實際上,我們可以將 mystring 看作是 string 型別的乙個別名,在go 語言中的基本資料型別 rune 型別就是如此,它可以看作是 uint32 型別的乙個別名型別,其潛在型別就是 uint32 ,但是一類要注意, mystring 與 string 卻並不是乙個相同的型別。

潛在型別在宣告過程中是具有可傳遞性的,如下面我們再宣告乙個 istring 型別:

type istring mystring

istring 型別的潛在型別同樣就是 string 型別。

1. // 單行注釋

2. /*...

... 多行注釋

*/3. 一般來說,單行注釋較多

基礎結構

// 包名稱package只能出現在檔案開頭

package main

// 匯入包

import

"fmt"

// 常量定義

const name = "kingwang"

// 變數定義

var a = "king"

// main 函式

func main()

複雜結構

// 程式所屬包

package main

// 匯入依賴包

import

"fmt"

// 常量定義

const name string = "我是常量"

// 全域性變數的宣告與賦值

var a string = "全域性變數宣告域賦值"

// 一般型別宣告

type kingint int

// 結構宣告

type learn struct

// 結構宣告

type ilearn inte***ce

// 函式定義

func learnking ()

// main函式

func main()

package

import

// 寫法1

import

"fmt"

import

"time"

// 寫法2

import (

"fmt"

"time"

)

原理

特殊用法變數宣告和初始化

var (

i int

j float32

name string

)

型別轉化

變數可見性規則

常量定義形式

可以使用內建表示式定義,如:len(),unsafe.sizeof()等

常量的範圍目前只支援布林型、數字型(整型、浮點型和複數)和字串型

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...

go語言基礎語法

由菜鳥教程中做的筆記 package main import fmt func main 第一行 package main 定義了包名。你必須在原始檔中非注釋的第一行指明這個檔案屬於哪個包,如 package main。package main表示乙個可獨立執行的程式,每個 go 應用程式都包含乙個...