Go語(yǔ)言常量和C語(yǔ)言差不多
徐匯ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場(chǎng)景,ssl證書(shū)未來(lái)市場(chǎng)廣闊!成為創(chuàng)新互聯(lián)建站的ssl證書(shū)銷售渠道,可以享受市場(chǎng)價(jià)格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:18980820575(備注:SSL證書(shū)合作)期待與您的合作!
Go語(yǔ)言定義常量const不能少,數(shù)據(jù)類型可以不寫(xiě)
Go語(yǔ)言定義常量不能用:=
Go語(yǔ)言定義常量沒(méi)有賦初值,那么值就和上一行的常量的值相等
Go語(yǔ)句中沒(méi)有明確枚舉的固定寫(xiě)法, 但是在企業(yè)開(kāi)發(fā)中一般都會(huì)常量組的形式來(lái)表示枚舉
const(
枚舉元素 = 值
枚舉元素 = 值
)
用法:
const(
num = itoa
num2 = itoa
)
itoa從0開(kāi)始,遇到一行賦值就+1
例如:
Go語(yǔ)言也稱 Golang,兼具效率、性能、安全、健壯等特性。這套Go語(yǔ)言教程(Golang教程)通俗易懂,深入淺出,既適合沒(méi)有基礎(chǔ)的讀者快速入門(mén),也適合工作多年的程序員查閱知識(shí)點(diǎn)。
Go 語(yǔ)言
這套教程在講解一些知識(shí)點(diǎn)時(shí),將 Go 語(yǔ)言和其他多種語(yǔ)言進(jìn)行對(duì)比,讓掌握其它編程語(yǔ)言的讀者能迅速理解 Go 語(yǔ)言的特性。Go語(yǔ)言從底層原生支持并發(fā),無(wú)須第三方庫(kù)、開(kāi)發(fā)者的編程技巧和開(kāi)發(fā)經(jīng)驗(yàn)就可以輕松搞定。
Go語(yǔ)言(或 Golang)起源于 2007 年,并在 2009 年正式對(duì)外發(fā)布。Go 是非常年輕的一門(mén)語(yǔ)言,它的主要目標(biāo)是“兼具 Python 等動(dòng)態(tài)語(yǔ)言的開(kāi)發(fā)速度和 C/C++ 等編譯型語(yǔ)言的性能與安全性”。
Go語(yǔ)言是編程語(yǔ)言設(shè)計(jì)的又一次嘗試,是對(duì)類C語(yǔ)言的重大改進(jìn),它不但能讓你訪問(wèn)底層操作系統(tǒng),還提供了強(qiáng)大的網(wǎng)絡(luò)編程和并發(fā)編程支持。Go語(yǔ)言的用途眾多,可以進(jìn)行網(wǎng)絡(luò)編程、系統(tǒng)編程、并發(fā)編程、分布式編程。
Go語(yǔ)言的推出,旨在不損失應(yīng)用程序性能的情況下降低代碼的復(fù)雜性,具有“部署簡(jiǎn)單、并發(fā)性好、語(yǔ)言設(shè)計(jì)良好、執(zhí)行性能好”等優(yōu)勢(shì),目前國(guó)內(nèi)諸多 IT 公司均已采用Go語(yǔ)言開(kāi)發(fā)項(xiàng)目。Go語(yǔ)言有時(shí)候被描述為“C 類似語(yǔ)言”,或者是“21 世紀(jì)的C語(yǔ)言”。Go 從C語(yǔ)言繼承了相似的表達(dá)式語(yǔ)法、控制流結(jié)構(gòu)、基礎(chǔ)數(shù)據(jù)類型、調(diào)用參數(shù)傳值、指針等很多思想,還有C語(yǔ)言一直所看中的編譯后機(jī)器碼的運(yùn)行效率以及和現(xiàn)有操作系統(tǒng)的無(wú)縫適配。
因?yàn)镚o語(yǔ)言沒(méi)有類和繼承的概念,所以它和 Java 或 C++ 看起來(lái)并不相同。但是它通過(guò)接口(interface)的概念來(lái)實(shí)現(xiàn)多態(tài)性。Go語(yǔ)言有一個(gè)清晰易懂的輕量級(jí)類型系統(tǒng),在類型之間也沒(méi)有層級(jí)之說(shuō)。因此可以說(shuō)Go語(yǔ)言是一門(mén)混合型的語(yǔ)言。
此外,很多重要的開(kāi)源項(xiàng)目都是使用Go語(yǔ)言開(kāi)發(fā)的,其中包括 Docker、Go-Ethereum、Thrraform 和 Kubernetes。Go 是編譯型語(yǔ)言,Go 使用編譯器來(lái)編譯代碼。編譯器將源代碼編譯成二進(jìn)制(或字節(jié)碼)格式;在編譯代碼時(shí),編譯器檢查錯(cuò)誤、優(yōu)化性能并輸出可在不同平臺(tái)上運(yùn)行的二進(jìn)制文件。要?jiǎng)?chuàng)建并運(yùn)行 Go 程序,程序員必須執(zhí)行如下步驟。
使用文本編輯器創(chuàng)建 Go 程序;
保存文件;編譯程序;運(yùn)行編譯得到的可執(zhí)行文件。
這不同于 Python、Ruby 和 JavaScript 等語(yǔ)言,它們不包含編譯步驟。Go 自帶了編譯器,因此無(wú)須單獨(dú)安裝編譯器。
鏈喬教育在線旗下學(xué)碩創(chuàng)新區(qū)塊鏈技術(shù)工作站是中國(guó)教育部學(xué)校規(guī)劃建設(shè)發(fā)展中心開(kāi)展的“智慧學(xué)習(xí)工場(chǎng)2020-學(xué)碩創(chuàng)新工作站 ”唯一獲準(zhǔn)的“區(qū)塊鏈技術(shù)專業(yè)”試點(diǎn)工作站。專業(yè)站立足為學(xué)生提供多樣化成長(zhǎng)路徑,推進(jìn)專業(yè)學(xué)位研究生產(chǎn)學(xué)研結(jié)合培養(yǎng)模式改革,構(gòu)建應(yīng)用型、復(fù)合型人才培養(yǎng)體系。
本文介紹一些Go語(yǔ)言的基礎(chǔ)語(yǔ)法。
先來(lái)看一個(gè)簡(jiǎn)單的go語(yǔ)言代碼:
go語(yǔ)言的注釋方法:
代碼執(zhí)行結(jié)果:
下面來(lái)進(jìn)一步介紹go的基礎(chǔ)語(yǔ)法。
go語(yǔ)言中格式化輸出可以使用 fmt 和 log 這兩個(gè)標(biāo)準(zhǔn)庫(kù),
常用方法:
示例代碼:
執(zhí)行結(jié)果:
更多格式化方法可以訪問(wèn)中的fmt包。
log包實(shí)現(xiàn)了簡(jiǎn)單的日志服務(wù),也提供了一些格式化輸出的方法。
執(zhí)行結(jié)果:
下面來(lái)介紹一下go的數(shù)據(jù)類型
下表列出了go語(yǔ)言的數(shù)據(jù)類型:
int、float、bool、string、數(shù)組和struct屬于值類型,這些類型的變量直接指向存在內(nèi)存中的值;slice、map、chan、pointer等是引用類型,存儲(chǔ)的是一個(gè)地址,這個(gè)地址存儲(chǔ)最終的值。
常量是在程序編譯時(shí)就確定下來(lái)的值,程序運(yùn)行時(shí)無(wú)法改變。
執(zhí)行結(jié)果:
執(zhí)行結(jié)果:
Go 語(yǔ)言的運(yùn)算符主要包括算術(shù)運(yùn)算符、關(guān)系運(yùn)算符、邏輯運(yùn)算符、位運(yùn)算符、賦值運(yùn)算符以及指針相關(guān)運(yùn)算符。
算術(shù)運(yùn)算符:
關(guān)系運(yùn)算符:
邏輯運(yùn)算符:
位運(yùn)算符:
賦值運(yùn)算符:
指針相關(guān)運(yùn)算符:
下面介紹一下go語(yǔ)言中的if語(yǔ)句和switch語(yǔ)句。另外還有一種控制語(yǔ)句叫select語(yǔ)句,通常與通道聯(lián)用,這里不做介紹。
if語(yǔ)法格式如下:
if ... else :
else if:
示例代碼:
語(yǔ)法格式:
另外,添加 fallthrough 會(huì)強(qiáng)制執(zhí)行后面的 case 語(yǔ)句,不管下一條case語(yǔ)句是否為true。
示例代碼:
執(zhí)行結(jié)果:
下面介紹幾種循環(huán)語(yǔ)句:
執(zhí)行結(jié)果:
執(zhí)行結(jié)果:
也可以通過(guò)標(biāo)記退出循環(huán):
--THE END--
【格式化輸出】
// 格式化輸出:將 arg 列表中的 arg 轉(zhuǎn)換為字符串輸出
// 使用動(dòng)詞 v 格式化 arg 列表,非字符串元素之間添加空格
Print(arg列表)
// 使用動(dòng)詞 v 格式化 arg 列表,所有元素之間添加空格,結(jié)尾添加換行符
Println(arg列表)
// 使用格式字符串格式化 arg 列表
Printf(格式字符串, arg列表)
// Print 類函數(shù)會(huì)返回已處理的 arg 數(shù)量和遇到的錯(cuò)誤信息。
【格式字符串】
格式字符串由普通字符和占位符組成,例如:
"abc%+ #8.3[3]vdef"
其中 abc 和 def 是普通字符,其它部分是占位符,占位符以 % 開(kāi)頭(注:%% 將被轉(zhuǎn)義為一個(gè)普通的 % 符號(hào),這個(gè)不算開(kāi)頭),以動(dòng)詞結(jié)尾,格式如下:
%[旗標(biāo)][寬度][.精度][arg索引]動(dòng)詞
方括號(hào)中的內(nèi)容可以省略。
【旗標(biāo)】
旗標(biāo)有以下幾種:
空格:對(duì)于數(shù)值類型的正數(shù),保留一個(gè)空白的符號(hào)位(其它用法在動(dòng)詞部分說(shuō)明)。
0 :用 0 進(jìn)行寬度填充而不用空格,對(duì)于數(shù)值類型,符號(hào)將被移到所有 0 的前面。
其中 "0" 和 "-" 不能同時(shí)使用,優(yōu)先使用 "-" 而忽略 "0"。
【寬度和精度】
“寬度”和“精度”都可以寫(xiě)成以下三種形式:
數(shù)值 | * | arg索引*
其中“數(shù)值”表示使用指定的數(shù)值作為寬度值或精度值,“ ”表示使用當(dāng)前正在處理的 arg 的值作為寬度值或精度值,如果這樣的話,要格式化的 arg 將自動(dòng)跳轉(zhuǎn)到下一個(gè)。“arg索引 ”表示使用指定 arg 的值作為寬度值或精度值,如果這樣的話,要格式化的 arg 將自動(dòng)跳轉(zhuǎn)到指定 arg 的下一個(gè)。
寬度值:用于設(shè)置最小寬度。
精度值:對(duì)于浮點(diǎn)型,用于控制小數(shù)位數(shù),對(duì)于字符串或字節(jié)數(shù)組,用于控制字符數(shù)量(不是字節(jié)數(shù)量)。
對(duì)于浮點(diǎn)型而言,動(dòng)詞 g/G 的精度值比較特殊,在適當(dāng)?shù)那闆r下,g/G 會(huì)設(shè)置總有效數(shù)字,而不是小數(shù)位數(shù)。
【arg 索引】
“arg索引”由中括號(hào)和 arg 序號(hào)組成(就像上面示例中的 [3]),用于指定當(dāng)前要處理的 arg 的序號(hào),序號(hào)從 1 開(kāi)始:
'[' + arg序號(hào) + ']'
【動(dòng)詞】
“動(dòng)詞”不能省略,不同的數(shù)據(jù)類型支持的動(dòng)詞不一樣。
[通用動(dòng)詞]
v:默認(rèn)格式,不同類型的默認(rèn)格式如下:
布爾型:t
整 型:d
浮點(diǎn)型:g
復(fù)數(shù)型:g
字符串:s
通 道:p
指 針:p
無(wú)符號(hào)整型:x
T:輸出 arg 的類型而不是值(使用 Go 語(yǔ)法格式)。
[布爾型]
t:輸出 true 或 false 字符串。
[整型]
b/o/d:輸出 2/8/10 進(jìn)制格式
x/X :輸出 16 進(jìn)制格式(小寫(xiě)/大寫(xiě))
c :輸出數(shù)值所表示的 Unicode 字符
q :輸出數(shù)值所表示的 Unicode 字符(帶單引號(hào))。對(duì)于無(wú)法顯示的字符,將輸出其轉(zhuǎn)義字符。
U :輸出 Unicode 碼點(diǎn)(例如 U+1234,等同于字符串 "U+%04X" 的顯示結(jié)果)
對(duì)于 o/x/X:
如果使用 "#" 旗標(biāo),則會(huì)添加前導(dǎo) 0 或 0x。
對(duì)于 U:
如果使用 "#" 旗標(biāo),則會(huì)在 Unicode 碼點(diǎn)后面添加相應(yīng)的 '字符'(前提是該字符必須可顯示)
[浮點(diǎn)型和復(fù)數(shù)型]
b :科學(xué)計(jì)數(shù)法(以 2 為底)
e/E:科學(xué)計(jì)數(shù)法(以 10 為底,小寫(xiě) e/大寫(xiě) E)
f/F:普通小數(shù)格式(兩者無(wú)區(qū)別)
g/G:大指數(shù)(指數(shù) = 6)使用 %e/%E,其它情況使用 %f/%F
[字符串或字節(jié)切片]
s :普通字符串
q :雙引號(hào)引起來(lái)的 Go 語(yǔ)法字符串
x/X:十六進(jìn)制編碼(小寫(xiě)/大寫(xiě),以字節(jié)為元素進(jìn)行編碼,而不是字符)
對(duì)于 q:
如果使用了 "+" 旗標(biāo),則將所有非 ASCII 字符都進(jìn)行轉(zhuǎn)義處理。
如果使用了 "#" 旗標(biāo),則輸出反引號(hào)引起來(lái)的字符串(前提是
字符串中不包含任何制表符以外的控制字符,否則忽略 # 旗標(biāo))
對(duì)于 x/X:
如果使用了 " " 旗標(biāo),則在每個(gè)元素之間添加空格。
如果使用了 "#" 旗標(biāo),則在十六進(jìn)制格式之前添加 0x 前綴。
[指針類型]
p :帶 0x 前綴的十六進(jìn)制地址值。
[符合類型]
復(fù)合類型將使用不同的格式輸出,格式如下:
結(jié) 構(gòu) 體:{字段1 字段2 ...}
數(shù)組或切片:[元素0 元素1 ...]
映 射:map[鍵1:值1 鍵2:值2 ...]
指向符合元素的指針:{}, [], map[]
復(fù)合類型本身沒(méi)有動(dòng)詞,動(dòng)詞將應(yīng)用到復(fù)合類型的元素上。
結(jié)構(gòu)體可以使用 "+v" 同時(shí)輸出字段名。
【注意】
1、如果 arg 是一個(gè)反射值,則該 arg 將被它所持有的具體值所取代。
2、如果 arg 實(shí)現(xiàn)了 Formatter 接口,將調(diào)用它的 Format 方法完成格式化。
3、如果 v 動(dòng)詞使用了 # 旗標(biāo)(%#v),并且 arg 實(shí)現(xiàn)了 GoStringer 接口,將調(diào)用它的 GoString 方法完成格式化。
如果格式化操作指定了字符串相關(guān)的動(dòng)詞(比如 %s、%q、%v、%x、%X),接下來(lái)的兩條規(guī)則將適用:
4。如果 arg 實(shí)現(xiàn)了 error 接口,將調(diào)用它的 Error 方法完成格式化。
5。如果 arg 實(shí)現(xiàn)了 string 接口,將調(diào)用它的 String 方法完成格式化。
在實(shí)現(xiàn)格式化相關(guān)接口的時(shí)候,要避免無(wú)限遞歸的情況,比如:
type X string
func (x X) String() string {
return Sprintf("%s", x)
}
在格式化之前,要先轉(zhuǎn)換數(shù)據(jù)類型,這樣就可以避免無(wú)限遞歸:
func (x X) String() string {
return Sprintf("%s", string(x))
}
無(wú)限遞歸也可能發(fā)生在自引用數(shù)據(jù)類型上面,比如一個(gè)切片的元素引用了切片自身。這種情況比較罕見(jiàn),比如:
a := make([]interface{}, 1)
a[0] = a
fmt.Println(a)
【格式化輸入】
// 格式化輸入:從輸入端讀取字符串(以空白分隔的值的序列),
// 并解析為具體的值存入相應(yīng)的 arg 中,arg 必須是變量地址。
// 字符串中的連續(xù)空白視為單個(gè)空白,換行符根據(jù)不同情況處理。
// \r\n 被當(dāng)做 \n 處理。
// 以動(dòng)詞 v 解析字符串,換行視為空白
Scan(arg列表)
// 以動(dòng)詞 v 解析字符串,換行結(jié)束解析
Scanln(arg列表)
// 根據(jù)格式字符串中指定的格式解析字符串
// 格式字符串中的換行符必須和輸入端的換行符相匹配。
Scanf(格式字符串, arg列表)
// Scan 類函數(shù)會(huì)返回已處理的 arg 數(shù)量和遇到的錯(cuò)誤信息。
【格式字符串】
格式字符串類似于 Printf 中的格式字符串,但下面的動(dòng)詞和旗標(biāo)例外:
p :無(wú)效
T :無(wú)效
e/E/f/F/g/G:功能相同,都是掃描浮點(diǎn)數(shù)或復(fù)數(shù)
s/v :對(duì)字符串而言,掃描一個(gè)被空白分隔的子串
對(duì)于整型 arg 而言,v 動(dòng)詞可以掃描帶有前導(dǎo) 0 或 0x 的八進(jìn)制或十六進(jìn)制數(shù)值。
寬度被用來(lái)指定最大掃描寬度(不會(huì)跨越空格),精度不被支持。
如果 arg 實(shí)現(xiàn)了 Scanner 接口,將調(diào)用它的 Scan 方法掃描相應(yīng)數(shù)據(jù)。只有基礎(chǔ)類型和實(shí)現(xiàn)了 Scanner 接口的類型可以使用 Scan 類方法進(jìn)行掃描。
【注意】
連續(xù)調(diào)用 FScan 可能會(huì)丟失數(shù)據(jù),因?yàn)?FScan 中使用了 UnreadRune 對(duì)讀取的數(shù)據(jù)進(jìn)行撤銷,而參數(shù) io.Reader 只有 Read 方法,不支持撤銷。比如:
一.幾種公共方法
1)Print:???輸出到控制臺(tái)(不接受任何格式化,它等價(jià)于對(duì)每一個(gè)操作數(shù)都應(yīng)用?%v)
print 在golang中?是屬于輸出到標(biāo)準(zhǔn)錯(cuò)誤流中并打印,官方不建議寫(xiě)程序時(shí)候用它。可以再debug時(shí)候用
2)Println:?輸出到控制臺(tái)并換行
3)Printf :?只可以打印出格式化的字符串。只可以直接輸出字符串類型的變量(不可以輸出整形變量和整形等)
4)Sprintf:格式化并返回一個(gè)字符串而不帶任何輸出
5)Fprintf:來(lái)格式化并輸出到 io.Writers 而不是 os.Stdout
二.帶占位符輸出--網(wǎng)址:? ??
和python差不多的道理,這里簡(jiǎn)單補(bǔ)充
v ????值的默認(rèn)格式
%+v???添加字段名(如結(jié)構(gòu)體)
%#v ?相應(yīng)值的Go語(yǔ)法表示?
%T????相應(yīng)值的類型的Go語(yǔ)法表示?
%%????字面上的百分號(hào),并非值的占位符
%c?????相應(yīng)Unicode碼點(diǎn)所表示的字符?
%x?????十六進(jìn)制表示,字母形式為小寫(xiě) a-f
%X?????十六進(jìn)制表示,字母形式為大寫(xiě) A-F
%U???? Unicode格式:U+1234,等同于?"U+%04X"
reader := bufio.NewReader(os.Stdin)
fmt.Print("Enter text: ")
text, _ := reader.ReadString('\n')
fmt.Println(text)
這是讀取控制臺(tái)輸入的數(shù)據(jù),可以開(kāi)協(xié)程的方式來(lái)執(zhí)行這個(gè)代碼,協(xié)程讀取,就可以在其他地方使用
當(dāng)前標(biāo)題:go語(yǔ)言怎么輸出圖片,go語(yǔ)言怎么輸出圖片文件
標(biāo)題URL:http://www.chinadenli.net/article28/heicjp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站收錄、移動(dòng)網(wǎng)站建設(shè)、云服務(wù)器、做網(wǎng)站、外貿(mào)建站、Google
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)