這裡是 golang 教程系列的第五部分。
請閱讀 golang 教程第四部分 - 型別以了解 golang 基本型別。
常量,一詞在 go 中用來表示固定值,如 5、-89、「i love go」、67.89 等等。
參考以下**
var a int = 50
var b string = "i love go"
在上面的**中,a 和 b 分別賦值給常數 50 和 i love go。關鍵字 const 用於表示諸如 50 和 i love go 之類的常量。儘管我們在上面的**中沒有顯式地使用關鍵字 const,但在內部,它們是 go 中的常量。
乙個常量表明不能再重新賦值給任何其他值,因此下面的程式將無法工作,它將失敗,編譯錯誤不能賦值給 a。
package main
func main()
在 playground 執行
常量的值應該在編譯時就知道。因此,它不能被分配給函式呼叫返回的值,因為函式呼叫發生在執行時。
package main
import (
"fmt"
"math"
)func main()
在 playground 執行
在上面的程式中,a 是乙個變數,因此它可以分配給函式的結果 math.sqrt(4)(我們將在單獨的教程中更詳細地討論函式)。
b 是常量,在編譯時需要知道 b 的值。該函式math.sqrt(4)
僅在執行時進行計算,因此const b = math.sqrt(4)
丟擲錯誤error main.go:11: const initializer math.sqrt(4) is not a constant。
雙引號之間的任何值都是 go 中的字串常量。例如,像 「hello world」 或 「sam」 這樣的字串都是 go 中的常量。
字串常量屬於什麼型別?答案是它們是無型別的。
像 「hello world」 這樣的字串常量沒有任何型別。
const hello = "hello world"
在上面的例子中,我們將 「hello world」 分配給乙個命名的常量hello
。常量 hello 有型別嗎? 答案是否定的。常數仍然沒有型別。
go 是一種強型別語言。所有變數都需要顯式型別。那麼,下面的程式是如何將變數名分配給無型別常量 sam 的呢?
package main
import (
"fmt"
)func main()
在 playground 執行
答案是無型別常量有乙個與之關聯的預設型別,當且僅當一行**需要它時,它們才提供它。在 var name = 「sam」 語句中,name 需要乙個型別,它從字串常量 「sam」 的預設型別獲得該型別,該字串是乙個字串。
有沒有辦法建立乙個型別常量?答案是肯定的。以下**建立乙個型別化常量。
const typedhello string = "hello world"
上面**中的 typedhello 是 string 型別的常量。
go 是一種強型別語言。不允許在分配期間混合型別。讓我們通過乙個程式來看看這意味著什麼。
package main
func main()
在 playground 執行
在上面的**中,我們首先建立乙個變數defaultname
並將其分配給常量 sam。常量 sam 的預設型別是 string,因此在賦值之後defaultname
的型別是 string。
在下一行中,我們建立乙個新的型別mystring
,它是string
的別名。
然後我們建立乙個mystring
型別的customname
變數,並將其分配給常量 sam。由於常量 sam 是無型別的,所以可以將它分配給任何字串變數。因此,這個賦值是允許的,customname
獲取型別mystring
。
現在我們有乙個型別為 string 的變數defaultname
和另乙個型別為mystring
的變數customname
。儘管我們知道mystring
是string
的別名,但 go 的強型別策略不允許將一種型別的變數分配給另一種型別。因此,不允許賦值customname = defaultname
,編譯器將丟擲乙個錯誤:main.go:7:20: cannot use defaultname (type string) as type mystring in assignment
布林常量與字串常量沒有區別。它們是兩個型別化常量true
和false
。字串常量的相同規則適用於 booleans,因此我們在此不再重複。以下是解釋 booleans 常量的簡單程式。
package main
func main()
在 playground 執行
上面的程式是不言而明的。
numeric 常量包括整數、浮點數和複數常量。數值常量有一些微妙之處。
讓我們看一些例子來把事情弄清楚。
package main
import (
"fmt"
)func main()
在 playground 執行
在上面的程式中,const a
是無型別的,值為 5。您可能想知道 a 的預設型別是什麼,如果它確實有,那麼我們如何將它分配給不同型別的變數。答案在於 a 的語法。下面的程式將使事情變得更清楚。
package main
import (
"fmt"
)func main()
在 playground 執行
在上面的程式中,每個變數的型別由數值常量的語法決定。5 按語法是整數,5.6 是浮點數,5 + 6i 按語法是複數。當上面的程式執行時,它輸出 i 的 int 型別、f 的 float64 型別、c 的 complex128 型別。
現在,我希望大家能清楚地了解下面的程式是如何工作的。
package main
import (
"fmt"
)func main()
在 playground 執行
在這個程式中,a 的值是 5,a 的語法是通用的(它可以表示浮點數、整數,甚至沒有虛數的複數),因此可以分配給任何相容的型別。這類常量的預設型別可以看作是根據上下文動態生成的。var intvar int = a
要求 a 是整型的,所以它變成了乙個整型常量。var complex64 = a
要求 a 是乙個複數,因此它變成了乙個複數常量。非常整潔 ?。
數值常量可以自由地在表示式中混合和匹配,只有當它們被分配給變數或在需要型別的**中的任何地方使用時,才需要型別。
package main
import (
"fmt"
)func main() {
var a = 5.9/8
fmt.printf("a's type %t value %v",a, a)
在 playground 執行
在上面的程式中,5.9 按語法是浮點數,8 按語法是整數。仍然允許5.9/8
,因為它們都是數值常量。除法的結果是0.7375
是乙個浮點數,因此變數 a 是float
型別。程式的輸出是 a 型別的float64
值0.7375
。
本章是常量。請分享您寶貴的反饋和意見。
基本概念 part5
今天我們要正式的開始學習object型別 object型別又稱為物件型別,不僅僅只是在js中有物件型別,其他的語言裡面也有物件型別,但是js中的物件其實就是一組資料和功能的集合,那麼我們要怎麼建立乙個物件呢?new關鍵字就可以創造出來乙個新的物件 這裡想起了乙個段子,程式設計師的物件都是new出來的...
Part 5 多元函式基礎
設 d subset mathbb n,d not varnothing 如果存在乙個對應法則 f 對每乙個 p x 1,x 2 cdots x n in d 都有唯一的乙個實數 y 與之對應,則稱 f forall p in d mapsto y 是 d 上的 n 元函式,記作 y f p p i...
R開發 part5 導數計算
學習筆記,僅供參考,有錯必糾 一階導通過r語言可以使用deriv函式直接進行導數的計算,比如要計算y x 3y x 3 y x3 的導數,根據導數計算公式,用於手動計算的變形結果為y 3x 2y 3x 2 y 3x2 當x 1 x 1x 1時,y 3y 3 y 3 當x 2 x 2x 2時,y 12...