Golang 學習路線 Part 5 常量

2021-09-27 07:18:31 字數 4166 閱讀 5672

這裡是 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。儘管我們知道mystringstring的別名,但 go 的強型別策略不允許將一種型別的變數分配給另一種型別。因此,不允許賦值customname = defaultname,編譯器將丟擲乙個錯誤:main.go:7:20: cannot use defaultname (type string) as type mystring in assignment

布林常量與字串常量沒有區別。它們是兩個型別化常量truefalse。字串常量的相同規則適用於 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 型別的float640.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...