語言變數
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
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 應用程式都包含乙個...