Go的100天之旅-常量

来源:https://www.cnblogs.com/pirate-hcc/archive/2020/07/15/13308269.html
-Advertisement-
Play Games

簡介 道可道,非常道。這裡常道指的永恆不變的道理,常有不變的意思。顧名思義和變數相比,常量在聲明之後就不可改變,它的值是在編譯期間就確定的。 下麵簡單的聲明一個常量: const p int = 1 聲明常量的時候可以指定類型也可以類似:=簡單聲明一樣,不指定類型如下: const p = 1 也可 ...


目錄

簡介

道可道,非常道。這裡常道指的永恆不變的道理,常有不變的意思。顧名思義和變數相比,常量在聲明之後就不可改變,它的值是在編譯期間就確定的。
下麵簡單的聲明一個常量:

const p int = 1

聲明常量的時候可以指定類型也可以類似:=簡單聲明一樣,不指定類型如下:

const p = 1

也可以同時給多個賦值:

const i, j = 1, 2
const m, n = 1, "a"

也可以批量的聲明:

const (
    a = 0
    b = 1
)

如果批量的聲明,後面的可以省略聲明具體的值,它會和上一行的值保持一致比如:

const (
    a = 1
    b
    c = 2
    d
)

fmt.Println(a, b, c, d) // "1 1 2 2"

無類型常量

我們曾多次提到Go是一門靜態語言,變數的類型是不可變,甚至不可以對intint32兩種類型的變數進行+操作,即使int也是32位的例如:

package main

import "fmt"

func main() {
	var a int = 1
	var b int32 = 2
	fmt.Println(a + b)
}

編譯的時候會報invalid operation: a + b (mismatched types int and int32)
而簡單聲明的變數又是什麼類型呢把上面的代碼修改

package main

import "fmt"

func main() {
	a := 1
	var b int = 2
	fmt.Println(a + b)
}

發現是可以運行的,但是如果把b改成var b int32 = 2 也會報相同的錯誤,說明:=會給變數指定一個預設的數據類型,這個類型是確定。
常量和變數有一個很大的不同就是,它對六種基礎數據類型 布爾、整數、字元、浮點數、複數、字元串,如果聲明的時候沒有明確指定類型,它是不確定類型的,而是用到它的時候再確定它是否滿足這個類型的運行去確定它具體的類型。回到上面的代碼,我們如果改成這樣:

package main

import "fmt"

func main() {
	const a = 1
	var b int32 = 2
	fmt.Println(a + b)
}

這時運行通過,運行的時候a是 int32類型。那麼是不是它以後一直是這一種類型呢,我們看看下麵的代碼:

package main

import "fmt"

func main() {
	const a = 1
	var b int32 = a
    var c int = a
	fmt.Println(a)
    fmt.Println(c)
}

我們可以看到cb不是相同類型,但還是可以把a即賦值給b也可以賦值給c。也就是說只要是整數,不論是什麼類型都可以參與運行。同樣的道理,只要聲明常量的時候沒有指定類型,給它的賦值又是六種基本類型,常量都可以滿足這個特性。

特殊常量iota

iota可以理解為一個特殊的常量,它只能和const一起出現,而且只要const出現它就會被重置為0,然後每有一個常量被聲明它就加1

package main
import "fmt"
func main() {
	const (
		a = iota
		b
		c
	)
	println(a, b, c) // 0 1 2
	const (
		d = iota
		e
		f
	)
	fmt.Println(d, e, f) // 0 1 2
}

上面的a, b, c的聲明從0開始,每增加一行就加1。到d, e, f之後由於出現了const所以iota又被重置為0了。
iota也可以在聲明中參加運算,例如

const (
		a = iota * 3
		b
		c
	)
	fmt.Println(a, b, c) // 0 3 6

下麵一行保持和第一行相同的運行規則只是iota1了,所以相當於b = 3 * 1


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一、複習一下前面所學的內容 1.寫出下列字元或者數字的類型以及在printf()函數中使用什麼符號轉換 常量類型轉換說明(%轉換符號) 12 int %d 0X3 unsigned int %#x 'C' char(實際上是int) %c 2.34E07 double %e '\040' char( ...
  • 安裝python的mysqlclient==1.4.6報錯 環境:ubuntu18.04python 3.6.8Django 2.0 想要使用Django來操作MySQL,需要安裝一個驅動程式。在Python3中,選擇用mysqlclient做驅動。 安裝mysqlclient出現報錯: ERROR ...
  • 繼Golang學習系列第二天:變數、常量、數據類型和流程語句之後,今天開始學習數據類型之高級類型: 派生類型。 學過java的人都知道,java其實就8種基本類型:byte、short、int、long、float、double、char、boolean,但它有引用數據類型:字元串、數組、集合、類、 ...
  • 今天我們繼續來學習C語言的入門知識點 11. 作用域規則 任何一種編程中,作用域是程式中定義的變數所存在的區域,超過該區域變數就不能被訪問。C 語言中有三個地方可以聲明變數: 在函數或塊內部的局部變數 在所有函數外部的全局變數 在形式參數的函數參數定義中 讓我們來看看什麼是局部變數、全局變數和形式參 ...
  • 本文源碼:GitHub·點這裡 || GitEE·點這裡 一、集群環境搭建 1、環境概覽 ES版本6.3.2,集群名稱esmaster,虛擬機centos7。 服務群 角色劃分 說明 en-master master 主節點:esnode1 en-node01 slave 從節點:esnode2 e ...
  • 列表生成式即List Comprehensions,是Python內置的非常簡單卻強大的可以用來創建list的生成式。 通常我們在迴圈遍歷一個列表時,都是通過for迴圈來完成 L = [] for i in range(1,11) L.append(x*x) 結果如下: [1,4,9,16,25,3 ...
  • 1、一切皆對象 一、 類也是對象 在大多數編程語言中,類就是一組用來描述如何生成一個對象的代碼段,在Python中這一點仍然成立。但是,Python中的類還遠不止如此。類同樣也是一種對象。只要你使用關鍵字class,Python解釋器在執行的時候就會創建一個對象。下麵的代碼段: class MyCl ...
  • 一、基本概念 程式(program): 是為完成特定任務、用某種語言編寫的一組指令的集合。即指一 段靜態的代碼,靜態對象。 進程(process):是程式的一次執行過程,或是正在運行的一個程式。是一個動態 的過程:有它自身的產生、存在和消亡的過程。——生命周期 運行中的QQ,運行中的MP3播放器 程 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...