詳解Golang編程中的常量與變量
Go語言常量
常量是指該程序可能無法在其執(zhí)行期間改變的固定值。這些固定值也被稱為文字。
常量可以是任何像一個整型常量,一個浮點常量,字符常量或字符串文字的基本數(shù)據(jù)類型。還有枚舉常量。
常量是一樣,只是它們的值不能自己定義后進行修改常規(guī)變量處理。
整型常量
一個整數(shù)文字可以是十進制,八進制,或十六進制常數(shù)。前綴指定基或基數(shù):0x或0X的十六進制,0表示八進制,并沒有為十進制。
一個整數(shù)文字也可以有一個后綴為U和L的組合,分別為無符號和長整型。后綴可以是大寫或小寫,并且可以以任意順序。
這里是整數(shù)常量的一些例子:
212 /* Legal */
215u /* Legal */
0xFeeL /* Legal */
078 /* Illegal: 8 is not an octal digit */
032UU /* Illegal: cannot repeat a suffix */
以下是不同類型的整型常量的例子:
85 /* decimal */
0213 /* octal */
0x4b /* hexadecimal */
30 /* int */
30u /* unsigned int */
30l /* long */
30ul /* unsigned long */
浮點文本(常量)
浮點字面具有一個整數(shù)部分,一個小數(shù)點,一個小數(shù)部分,和一個指數(shù)部分。你可以表示十進制形式或指數(shù)形式浮點文字。
同時采用十進制形式表示,則必須包括小數(shù)點,指數(shù),或兩者并用而指數(shù)形式表示,則必須包括整數(shù)部分,小數(shù)部分,或者兩者兼而有之。有符號的指數(shù),通過e或E表示
下面是浮點面值的一些例子:
3.14159 /* Legal */
314159E-5L /* Legal */
510E /* Illegal: incomplete exponent */
210f /* Illegal: no decimal or exponent */
.e55 /* Illegal: missing integer or fraction */
轉(zhuǎn)義序列
有一些字符在Go中,前面有一個反斜杠他們將有特殊的含義,它們被用來表示類似的換行符(\n)或制表符(\t)。在這里,有一些這樣的轉(zhuǎn)義序列代碼的列表:
以下為例子來說明一些轉(zhuǎn)義字符序列:
package main
import "fmt"
func main() {
fmt.Printf("Hello\tWorld!")
}
當(dāng)上述代碼被編譯和執(zhí)行時,它產(chǎn)生了以下結(jié)果:
Hello World!
字符串文字
字符串文字或常量用雙引號“”。一個字符串包含類似于字符文字字符:普通字符,轉(zhuǎn)義序列和通用字符。
您可以使用字符串和分隔使用空格打破一個長行成多行。
下面是字符串的一些例子。所有的三種形式是相同的字符串。
"hello, dear"
"hello, \
dear"
"hello, " "d" "ear"
const 關(guān)鍵字
您可以使用 const 前綴來聲明常量使用特定的類型如下:
const variable type = value;
下面的例子說明了它的細節(jié):
package main
import "fmt"
func main() {
const LENGTH int = 10
const WIDTH int = 5
var area int
area = LENGTH * WIDTH
fmt.Printf("value of area : %d", area)
}
當(dāng)上述代碼被編譯和執(zhí)行時,它產(chǎn)生了以下結(jié)果:
value of area : 50
請注意,這是一個良好的編程習(xí)慣大寫定義常量。
Go語言變量
變量是什么,只不是給定到存儲區(qū)域,我們的程序可以操縱的名稱。在Go中每個變量具有特定的類型,它確定的大小和可變的存儲器的布局;能確定存儲器內(nèi)存儲的值的范圍;和組操作可以施加到變量。
一個變量名可以由字母,數(shù)字和下劃線。它必須以字母或下劃線。大寫和小寫字母是不同的,因為Go是區(qū)分大小寫的?;谠摶绢愋驮谇懊娴恼鹿?jié)中說明的那樣,將有以下基本變量類型:
Go編程語言也可以定義各種其他類型的變量,我們將在以后的章節(jié)列出,如:枚舉,指針,數(shù)組,結(jié)構(gòu),聯(lián)合,等等。對于本章覆蓋,讓我們只學(xué)習(xí)研究的基本變量類型。
在Go中變量定義:
一個變量的定義是指,告訴編譯器在哪里,有多少創(chuàng)建存儲變量。變量定義指定一個數(shù)據(jù)類型,并且包含的該類型,如下的一個或多個變量的列表:
var variable_list optional_data_type;
在這里,optional_data_type可以包括字節(jié),整型,float32,complex64,布爾或任何用戶定義的對象等有效Go的數(shù)據(jù)類型,variable_list可以由用逗號分隔的一個或多個標(biāo)識符名稱。一些有效的聲明如下所示:
var i, j, k int;
var c, ch byte;
var f, salary float32;
d = 42;
這一行var i, j, k; 既聲明并定義了變量i,j和k;這指示編譯器創(chuàng)建一個名為i,j和k的 int類型變量。
變量可以初始化(分配初始值)在他們的聲明。變量的類型是由編譯器自動根據(jù)傳遞給它的值判斷。初始化包括一個等號后跟一個常量表達式如下:
variable_name = value;
一些實例是:
d = 3, f = 5; // declaration of d and f. Here d and f are int
對于沒有初始化定義:具有靜態(tài)存儲時間變量的隱含零初始化(所有字節(jié)的值為0);所有其它變量的初始值是它們的數(shù)據(jù)類型的零值。
靜態(tài)類型聲明
靜態(tài)類型的變量聲明保障到編譯器,有一個變量存在具有給定類型和名稱,這樣編譯器進行進一步的編輯,而不需要對變量的完整細節(jié)。變量聲明有其意義在編譯時止,編譯器需要實際的變量聲明在鏈接程序時。
示例
試試下面的例子,其中變量已經(jīng)被聲明為有型,并且已被定義及主要函數(shù)內(nèi)部初始化:
package main
import "fmt"
func main() {
var x float64
x = 20.0
fmt.Println(x)
fmt.Printf("x is of type %T\n", x)
}
讓我們編譯和運行上面的程序,這將產(chǎn)生以下結(jié)果:
20
x is of type float64
動態(tài)類型聲明/類型推斷
動態(tài)類型變量聲明要求編譯器解釋的基礎(chǔ)上傳遞給它值變量的類型。編譯器不需要一個變量靜態(tài)有類型的必然要求。
示例
試試下面的例子,其中的變量已經(jīng)聲明沒有任何類型的,并已確定在主函數(shù)中初始化。如果類型推斷的,我們已經(jīng)初始化的變量y使用:=運算符,x初始化使用=運算符。
package main
import "fmt"
func main() {
var x float64 = 20.0
y := 42
fmt.Println(x)
fmt.Println(y)
fmt.Printf("x is of type %T\n", x)
fmt.Printf("y is of type %T\n", y)
}
讓我們編譯和運行上面的程序,這將產(chǎn)生以下結(jié)果:
20
42
x is of type float64
y is of type int
混合變量聲明
不同類型的變量可以一步到位使用類型推斷聲明。
例子
package main
import "fmt"
func main() {
var a, b, c = 3, 4, "foo"
fmt.Println(a)
fmt.Println(b)
fmt.Println(c)
fmt.Printf("a is of type %T\n", a)
fmt.Printf("b is of type %T\n", b)
fmt.Printf("c is of type %T\n", c)
}
讓我們編譯和運行上面的程序,這將產(chǎn)生以下結(jié)果:
3
4
foo
a is of type int
b is of type int
c is of type string
在Go中的左值和右值:
在Go中有兩種表達式:
lvalue : 引用一個存儲器位置的表達式被稱為“左值”表達。左值可能顯示為任一左手或賦值的右側(cè)。
rvalue : 術(shù)語右值是指被存儲在存儲器中的某些地址的數(shù)據(jù)值。右值是不能分配給它的值,這意味著右值可能出現(xiàn)在賦值的右側(cè)而不是左側(cè)的表達式。
變量是左值等都可能出現(xiàn)在賦值的左側(cè)。數(shù)字文字是右值,因此可能不會被分配,不能出現(xiàn)在左側(cè)。下面是一個有效語句:
x = 20.0
但是,下面是不是一個有效的聲明,并會產(chǎn)生編譯時錯誤:
10 = 20
相關(guān)文章
golang協(xié)程設(shè)計及調(diào)度原理
這篇文章主要介紹了golang協(xié)程設(shè)計及調(diào)度原理,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,感興趣的小伙伴可以參考一下2022-06-06Linux中Go環(huán)境配置和GoModule常用操作
這篇文章主要介紹了Linux中Go環(huán)境配置和GoModule,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-01-01Go用兩個協(xié)程交替打印100以內(nèi)的奇偶數(shù)的方法詳解
這篇文章主要給大家詳細介紹了Go用兩個協(xié)程交替打印100以內(nèi)的奇偶數(shù)的示例代碼,文中給大家介紹了兩個實現(xiàn)方法,使用無緩沖的channel和設(shè)置GOMAXPROCS=1,介紹的非常詳細,需要的朋友可以參考下2023-08-08pytorch中的transforms.ToTensor和transforms.Normalize的實現(xiàn)
本文主要介紹了pytorch中的transforms.ToTensor和transforms.Normalize的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-04-04