GO語(yǔ)言的控制語(yǔ)句詳解包括GO語(yǔ)言的指針語(yǔ)法
GO語(yǔ)言的控制語(yǔ)句
判斷結(jié)構(gòu):if-else
和大多數(shù)編程語(yǔ)言一樣,if-else的用法基本都一樣,直接來(lái)一個(gè)GO語(yǔ)言的例子
package main
import (
"fmt"
)
func main(
var str string = "A"
if str=="A"{
fmt.Println("匹配成功")
}else{
fmt.Println("匹配失敗")
}
)
輸出為:匹配成功如果更改了str的值,那么輸出就是匹配失敗,這就是一個(gè)最簡(jiǎn)單的判斷語(yǔ)句,還有一些復(fù)雜的,在以后的程序中遇到了在說(shuō)(完整的if-else可能要講一大章)
switch 結(jié)構(gòu)
將某些特點(diǎn)的某個(gè)變量進(jìn)行匹配相對(duì)應(yīng)的值,省去if-else不的結(jié)構(gòu),以更清晰可讀的方式來(lái)展現(xiàn),一個(gè)完整的例子
package main
import(
"fmt"
)
func main(
var num int = 20
switch num{
case 10:
fmt.Println("num = 10")
case 20:
fmt.Println("num = 20")
case 30:
fmt.Println("num = 30")
default:
fmt.Println("default = 0")
}
)
輸出:
num = 20
補(bǔ)充說(shuō)明:
在GO語(yǔ)言中,不用使用
break來(lái)進(jìn)行結(jié)束當(dāng)前執(zhí)行塊,程序會(huì)自動(dòng)匹配完全成后結(jié)束;
那么問(wèn)題來(lái)了,如果不想結(jié)束匹配呢?在GO語(yǔ)言中,使用fallthrough關(guān)鍵字來(lái)繼續(xù)匹配如:
var num int = 20
switch num{
case 10:
fmt.Println("num = 10")
case 20:
fmt.Println("num = 20")
fallthrough
case 30:
fmt.Println("num = 30")
default:
fmt.Println("default = 0")
}
程序會(huì)輸出:
num = 20 num = 30
思考:在什么時(shí)候用swithc,什么時(shí)候用if-else?可以自己寫(xiě)一點(diǎn)小DEMO來(lái)測(cè)試下這兩種判斷語(yǔ)句結(jié)構(gòu)
循環(huán)控制結(jié)構(gòu) for
在GO語(yǔ)言中,循環(huán)只有for這一個(gè)關(guān)鍵字,實(shí)現(xiàn)多種循環(huán)結(jié)構(gòu),省去了其它語(yǔ)言的比如:while,do-while,foreach,所以for的功能更加靈活
1. for的第一種形式
和大多數(shù)其它語(yǔ)言一樣,基本形式是:
for 初始化語(yǔ)句; 條件語(yǔ)句; 修飾語(yǔ)句 {}
一個(gè)完整的例子
package main
import(
"fmt"
)
func main(){
var num int = 5
for i:=0;i<num;i++{
fmt.Printf("num index id %d \n", i)
}
}
輸出為:
num index id 0 num index id 1 num index id 2 num index id 3 num index id 4
補(bǔ)充:GO語(yǔ)言中的for循環(huán)是不用在判斷部分加上()來(lái)進(jìn)行包裹起來(lái)的
練習(xí)題:用GO的循環(huán)打印下面的格式
G GG GGG GGGG GGGGG
代碼:
package main
import(
"fmt"
)
func main(){
for i := 0; i < 5; i++ {
G := ""
for j := 0; j < i; j++ {
G += "G"
}
fmt.Println(G + "G")
}
}
2. for的第二種形式
這種格式在某種程度上面說(shuō):其實(shí)就是其它語(yǔ)言的do-while循環(huán),只不過(guò)GO將這種循環(huán)全部都用for來(lái)實(shí)現(xiàn)了
for 條件語(yǔ)句 {}
一個(gè)完整的例子:
package main
import(
"fmt"
)
func main(){
var num_2 int = 5
for num_2 > 0 {
fmt.Printf("num_is is %d \n", num_2)
num_2--
}
}
輸出為:
num_is is 5 num_is is 4 num_is is 3 num_is is 2 num_is is 1
3. for的第三種形式
這種形式,我一般叫它無(wú)限循環(huán),寫(xiě)這種形式的時(shí)候,一定要注意使用break,return等關(guān)鍵字,因?yàn)橐徊恍⌒木蜁?huì)寫(xiě)成死循環(huán)
for { } 或 for ;; { }或 for true { }
一個(gè)完整的例子
package main
import(
"fmt"
)
func main(){
var num_3 int = 5
for {
if num_3 < 0 {
break //把這一行給注釋看看
}
fmt.Printf("num_3 is %d \n", num_3)
num_3--
}
}
輸出為:
num_3 is 5 num_3 is 4 num_3 is 3 num_3 is 2 num_3 is 1 num_3 is 0
4. for的四種形式
這種形式就類似于其它語(yǔ)言的foreach關(guān)鍵字,進(jìn)行多層循環(huán)
for ix, val := range coll { }
一個(gè)完整的例子
package main
import(
"fmt"
)
func main(){
strs := "Hello World!例子"
for ins, char := range strs {
fmt.Printf("str is index %d,value is %c \n", ins, char)
}
}
輸出:
str is index 0,value is H str is index 1,value is e str is index 2,value is l str is index 3,value is l str is index 4,value is o str is index 5,value is str is index 6,value is W str is index 7,value is o str is index 8,value is r str is index 9,value is l str is index 10,value is d str is index 11,value is ! str is index 12,value is 例 str is index 15,value is 子
對(duì),你沒(méi)看錯(cuò),GO會(huì)自動(dòng)識(shí)別中文,常用的英文字母,數(shù)字為1個(gè)字節(jié),中文或其它字符占2-3個(gè)字節(jié)
控制語(yǔ)句常用關(guān)鍵字
break
結(jié)束當(dāng)前判斷或循環(huán),執(zhí)行下面的代碼
continue
結(jié)束當(dāng)次判斷或循環(huán),開(kāi)始下次的判斷或循環(huán)
return
返回當(dāng)前函數(shù),下面的代碼不在執(zhí)行
標(biāo)簽和goto的介紹,有空在介紹(其實(shí)是不太鼓勵(lì)大家用這個(gè),因?yàn)橐徊恍⌒?,作用域看錯(cuò)了,就會(huì)導(dǎo)致死循環(huán),一直在某個(gè)標(biāo)簽里面調(diào)用)
指針
- 在GO語(yǔ)言中,提供了控制數(shù)據(jù)結(jié)構(gòu)的指針的能力,但是,你不能進(jìn)行指針運(yùn)算;
- 在GO語(yǔ)言中,用
*關(guān)鍵字來(lái)聲明某個(gè)變量為指針變量;(例:var p *int) - 在GO語(yǔ)言中,用
&關(guān)鍵字來(lái)放到變量前,返回變量的內(nèi)存地址;(例:p = &變量) - 在GO語(yǔ)言中,格式化標(biāo)識(shí)符為
%p(例:fmt.Printf("%P",p)) - 一個(gè)完整的例子
package main
import(
"fmt"
)
func main(
s := "good bye"
var p *string = &s
*p = "ciao"
fmt.Printf("指針地址: %p\n", p)
fmt.Printf("指針P的值是: %s\n", *p)
fmt.Printf("變量S的值是: %s\n", s)
)
輸出為
指針地址: 0x2540820(內(nèi)存值可能會(huì)變) 指針P的值是: ciao 變量S的值是: ciao
為什么變量S的值和指針P的值一樣呢?
答:因?yàn)镻是指針,是內(nèi)存地址,當(dāng)給指針P重新賦值后,P所對(duì)應(yīng)的內(nèi)存地址的值就變了,而變量S的值所在的內(nèi)存塊正好是指針P所對(duì)應(yīng)的內(nèi)存
本文主要講解了GO語(yǔ)言的控制語(yǔ)句,包括GO語(yǔ)言的指針語(yǔ)法,GO語(yǔ)言switch結(jié)構(gòu),GO語(yǔ)言for的4種結(jié)構(gòu),更多關(guān)于GO語(yǔ)言的控制語(yǔ)句語(yǔ)法請(qǐng)查看下面的相關(guān)鏈接
相關(guān)文章
go的websocket實(shí)現(xiàn)原理與用法詳解
這篇文章主要介紹了go的websocket實(shí)現(xiàn)原理與用法,詳細(xì)分析了websocket的功能、原理及Go語(yǔ)言實(shí)現(xiàn)websocket的相關(guān)技巧,需要的朋友可以參考下2016-07-07
詳解Go語(yǔ)言中Goroutine退出機(jī)制的原理及使用
goroutine是Go語(yǔ)言提供的語(yǔ)言級(jí)別的輕量級(jí)線程,在我們需要使用并發(fā)時(shí),我們只需要通過(guò)?go?關(guān)鍵字來(lái)開(kāi)啟?goroutine?即可。本文就來(lái)詳細(xì)講講Goroutine退出機(jī)制的原理及使用,感興趣的可以了解一下2022-07-07
詳解Go語(yǔ)言如何利用高階函數(shù)寫(xiě)出優(yōu)雅的代碼
高階函數(shù)(Hiher-order?Function)定義為:滿足下列條件之一的函數(shù):接收一個(gè)或多個(gè)函數(shù)作為參數(shù);返回值是一個(gè)函數(shù)。本文為大家介紹了如何利用高階函數(shù)寫(xiě)出優(yōu)雅的代碼,希望對(duì)大家有所幫助2023-01-01
Go 并發(fā)讀寫(xiě) sync.map 詳細(xì)
閱讀本文你將會(huì)明確 sync.Map 和原生 map +互斥鎖/讀寫(xiě)鎖之間的性能情況。標(biāo)準(zhǔn)庫(kù) sync.Map 雖說(shuō)支持并發(fā)讀寫(xiě) map,但更適用于讀多寫(xiě)少的場(chǎng)景,因?yàn)樗麑?xiě)入的性能比較差,使用時(shí)要考慮清楚這一點(diǎn)。2021-10-10
Go語(yǔ)言TCP從原理到代碼實(shí)現(xiàn)詳解
這篇文章主要為大家介紹了Go語(yǔ)言TCP從原理到代碼實(shí)現(xiàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-08-08

