十年網(wǎng)站開發(fā)經(jīng)驗 + 多家企業(yè)客戶 + 靠譜的建站團隊
量身定制 + 運營維護+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
package main

創(chuàng)新互聯(lián)建站是由多位在大型網(wǎng)絡公司、廣告設計公司的優(yōu)秀設計人員和策劃人員組成的一個具有豐富經(jīng)驗的團隊,其中包括網(wǎng)站策劃、網(wǎng)頁美工、網(wǎng)站程序員、網(wǎng)頁設計師、平面廣告設計師、網(wǎng)絡營銷人員及形象策劃。承接:成都網(wǎng)站設計、成都網(wǎng)站制作、網(wǎng)站改版、網(wǎng)頁設計制作、網(wǎng)站建設與維護、網(wǎng)絡推廣、數(shù)據(jù)庫開發(fā),以高性價比制作企業(yè)網(wǎng)站、行業(yè)門戶平臺等全方位的服務。
import "fmt"
var arr [2]int //申明一個數(shù)組
func main() {
arr[0] = 1 //數(shù)組賦值
fmt.Println(arr)
arrtest := [3]int{1, 2, 3} //數(shù)組的另一種申明方式
fmt.Println(arrtest)
a := [...]int{1, 2} //[...]自動識別數(shù)組的長度
fmt.Println(a)
fmt.Println(len(a))//輸出數(shù)組的長度
}
下邊是slice的申明和使用其實這就是一種動態(tài)的數(shù)組
復制代碼 代碼如下:
package main
import "fmt"
func main() {
d := []int{1, 2, 3} //申明一個slice這個是動態(tài)的數(shù)組,沒有長度
fmt.Println(d)
var q, w []int
q = d[0:1] //可以定取得上邊的長度
w = d[1:3]
d = append(d, 2) //向其中添加元素
fmt.Println(d)
fmt.Println(q, w)
}
你的代碼是想把front到rear的值全部輸出
但是你下面的操作自己檢查一下沒有改變front的值,也沒有改變rear的值,所以front!=rear是死循環(huán)
如果好一點的話
void printQueue(LinkQueue *Q)/*依次輸出隊列*/
{
if(Q-front==Q-rear)
{
printf("隊列為空");
exit(1);
}
while(Q-front!=Q-rear)/*老師告訴我說是這里的while是死循環(huán),為什么是死循環(huán)呢,不是很懂,請細說。請幫我改為正確的代碼,謝謝。*/
{
printf("%d, ", Q-front-data);
Q-front=Q-front-next;
}
//exit(0);
}試試可不可以,不行再追問
本文介紹一些Go語言的基礎語法。
先來看一個簡單的go語言代碼:
go語言的注釋方法:
代碼執(zhí)行結(jié)果:
下面來進一步介紹go的基礎語法。
go語言中格式化輸出可以使用 fmt 和 log 這兩個標準庫,
常用方法:
示例代碼:
執(zhí)行結(jié)果:
更多格式化方法可以訪問中的fmt包。
log包實現(xiàn)了簡單的日志服務,也提供了一些格式化輸出的方法。
執(zhí)行結(jié)果:
下面來介紹一下go的數(shù)據(jù)類型
下表列出了go語言的數(shù)據(jù)類型:
int、float、bool、string、數(shù)組和struct屬于值類型,這些類型的變量直接指向存在內(nèi)存中的值;slice、map、chan、pointer等是引用類型,存儲的是一個地址,這個地址存儲最終的值。
常量是在程序編譯時就確定下來的值,程序運行時無法改變。
執(zhí)行結(jié)果:
執(zhí)行結(jié)果:
Go 語言的運算符主要包括算術運算符、關系運算符、邏輯運算符、位運算符、賦值運算符以及指針相關運算符。
算術運算符:
關系運算符:
邏輯運算符:
位運算符:
賦值運算符:
指針相關運算符:
下面介紹一下go語言中的if語句和switch語句。另外還有一種控制語句叫select語句,通常與通道聯(lián)用,這里不做介紹。
if語法格式如下:
if ... else :
else if:
示例代碼:
語法格式:
另外,添加 fallthrough 會強制執(zhí)行后面的 case 語句,不管下一條case語句是否為true。
示例代碼:
執(zhí)行結(jié)果:
下面介紹幾種循環(huán)語句:
執(zhí)行結(jié)果:
執(zhí)行結(jié)果:
也可以通過標記退出循環(huán):
--THE END--
【格式化輸出】
// 格式化輸出:將 arg 列表中的 arg 轉(zhuǎn)換為字符串輸出
// 使用動詞 v 格式化 arg 列表,非字符串元素之間添加空格
Print(arg列表)
// 使用動詞 v 格式化 arg 列表,所有元素之間添加空格,結(jié)尾添加換行符
Println(arg列表)
// 使用格式字符串格式化 arg 列表
Printf(格式字符串, arg列表)
// Print 類函數(shù)會返回已處理的 arg 數(shù)量和遇到的錯誤信息。
【格式字符串】
格式字符串由普通字符和占位符組成,例如:
"abc%+ #8.3[3]vdef"
其中 abc 和 def 是普通字符,其它部分是占位符,占位符以 % 開頭(注:%% 將被轉(zhuǎn)義為一個普通的 % 符號,這個不算開頭),以動詞結(jié)尾,格式如下:
%[旗標][寬度][.精度][arg索引]動詞
方括號中的內(nèi)容可以省略。
【旗標】
旗標有以下幾種:
空格:對于數(shù)值類型的正數(shù),保留一個空白的符號位(其它用法在動詞部分說明)。
0 :用 0 進行寬度填充而不用空格,對于數(shù)值類型,符號將被移到所有 0 的前面。
其中 "0" 和 "-" 不能同時使用,優(yōu)先使用 "-" 而忽略 "0"。
【寬度和精度】
“寬度”和“精度”都可以寫成以下三種形式:
數(shù)值 | * | arg索引*
其中“數(shù)值”表示使用指定的數(shù)值作為寬度值或精度值,“ ”表示使用當前正在處理的 arg 的值作為寬度值或精度值,如果這樣的話,要格式化的 arg 將自動跳轉(zhuǎn)到下一個?!癮rg索引 ”表示使用指定 arg 的值作為寬度值或精度值,如果這樣的話,要格式化的 arg 將自動跳轉(zhuǎn)到指定 arg 的下一個。
寬度值:用于設置最小寬度。
精度值:對于浮點型,用于控制小數(shù)位數(shù),對于字符串或字節(jié)數(shù)組,用于控制字符數(shù)量(不是字節(jié)數(shù)量)。
對于浮點型而言,動詞 g/G 的精度值比較特殊,在適當?shù)那闆r下,g/G 會設置總有效數(shù)字,而不是小數(shù)位數(shù)。
【arg 索引】
“arg索引”由中括號和 arg 序號組成(就像上面示例中的 [3]),用于指定當前要處理的 arg 的序號,序號從 1 開始:
'[' + arg序號 + ']'
【動詞】
“動詞”不能省略,不同的數(shù)據(jù)類型支持的動詞不一樣。
[通用動詞]
v:默認格式,不同類型的默認格式如下:
布爾型:t
整 型:d
浮點型:g
復數(shù)型:g
字符串:s
通 道:p
指 針:p
無符號整型:x
T:輸出 arg 的類型而不是值(使用 Go 語法格式)。
[布爾型]
t:輸出 true 或 false 字符串。
[整型]
b/o/d:輸出 2/8/10 進制格式
x/X :輸出 16 進制格式(小寫/大寫)
c :輸出數(shù)值所表示的 Unicode 字符
q :輸出數(shù)值所表示的 Unicode 字符(帶單引號)。對于無法顯示的字符,將輸出其轉(zhuǎn)義字符。
U :輸出 Unicode 碼點(例如 U+1234,等同于字符串 "U+%04X" 的顯示結(jié)果)
對于 o/x/X:
如果使用 "#" 旗標,則會添加前導 0 或 0x。
對于 U:
如果使用 "#" 旗標,則會在 Unicode 碼點后面添加相應的 '字符'(前提是該字符必須可顯示)
[浮點型和復數(shù)型]
b :科學計數(shù)法(以 2 為底)
e/E:科學計數(shù)法(以 10 為底,小寫 e/大寫 E)
f/F:普通小數(shù)格式(兩者無區(qū)別)
g/G:大指數(shù)(指數(shù) = 6)使用 %e/%E,其它情況使用 %f/%F
[字符串或字節(jié)切片]
s :普通字符串
q :雙引號引起來的 Go 語法字符串
x/X:十六進制編碼(小寫/大寫,以字節(jié)為元素進行編碼,而不是字符)
對于 q:
如果使用了 "+" 旗標,則將所有非 ASCII 字符都進行轉(zhuǎn)義處理。
如果使用了 "#" 旗標,則輸出反引號引起來的字符串(前提是
字符串中不包含任何制表符以外的控制字符,否則忽略 # 旗標)
對于 x/X:
如果使用了 " " 旗標,則在每個元素之間添加空格。
如果使用了 "#" 旗標,則在十六進制格式之前添加 0x 前綴。
[指針類型]
p :帶 0x 前綴的十六進制地址值。
[符合類型]
復合類型將使用不同的格式輸出,格式如下:
結(jié) 構 體:{字段1 字段2 ...}
數(shù)組或切片:[元素0 元素1 ...]
映 射:map[鍵1:值1 鍵2:值2 ...]
指向符合元素的指針:{}, [], map[]
復合類型本身沒有動詞,動詞將應用到復合類型的元素上。
結(jié)構體可以使用 "+v" 同時輸出字段名。
【注意】
1、如果 arg 是一個反射值,則該 arg 將被它所持有的具體值所取代。
2、如果 arg 實現(xiàn)了 Formatter 接口,將調(diào)用它的 Format 方法完成格式化。
3、如果 v 動詞使用了 # 旗標(%#v),并且 arg 實現(xiàn)了 GoStringer 接口,將調(diào)用它的 GoString 方法完成格式化。
如果格式化操作指定了字符串相關的動詞(比如 %s、%q、%v、%x、%X),接下來的兩條規(guī)則將適用:
4。如果 arg 實現(xiàn)了 error 接口,將調(diào)用它的 Error 方法完成格式化。
5。如果 arg 實現(xiàn)了 string 接口,將調(diào)用它的 String 方法完成格式化。
在實現(xiàn)格式化相關接口的時候,要避免無限遞歸的情況,比如:
type X string
func (x X) String() string {
return Sprintf("%s", x)
}
在格式化之前,要先轉(zhuǎn)換數(shù)據(jù)類型,這樣就可以避免無限遞歸:
func (x X) String() string {
return Sprintf("%s", string(x))
}
無限遞歸也可能發(fā)生在自引用數(shù)據(jù)類型上面,比如一個切片的元素引用了切片自身。這種情況比較罕見,比如:
a := make([]interface{}, 1)
a[0] = a
fmt.Println(a)
【格式化輸入】
// 格式化輸入:從輸入端讀取字符串(以空白分隔的值的序列),
// 并解析為具體的值存入相應的 arg 中,arg 必須是變量地址。
// 字符串中的連續(xù)空白視為單個空白,換行符根據(jù)不同情況處理。
// \r\n 被當做 \n 處理。
// 以動詞 v 解析字符串,換行視為空白
Scan(arg列表)
// 以動詞 v 解析字符串,換行結(jié)束解析
Scanln(arg列表)
// 根據(jù)格式字符串中指定的格式解析字符串
// 格式字符串中的換行符必須和輸入端的換行符相匹配。
Scanf(格式字符串, arg列表)
// Scan 類函數(shù)會返回已處理的 arg 數(shù)量和遇到的錯誤信息。
【格式字符串】
格式字符串類似于 Printf 中的格式字符串,但下面的動詞和旗標例外:
p :無效
T :無效
e/E/f/F/g/G:功能相同,都是掃描浮點數(shù)或復數(shù)
s/v :對字符串而言,掃描一個被空白分隔的子串
對于整型 arg 而言,v 動詞可以掃描帶有前導 0 或 0x 的八進制或十六進制數(shù)值。
寬度被用來指定最大掃描寬度(不會跨越空格),精度不被支持。
如果 arg 實現(xiàn)了 Scanner 接口,將調(diào)用它的 Scan 方法掃描相應數(shù)據(jù)。只有基礎類型和實現(xiàn)了 Scanner 接口的類型可以使用 Scan 類方法進行掃描。
【注意】
連續(xù)調(diào)用 FScan 可能會丟失數(shù)據(jù),因為 FScan 中使用了 UnreadRune 對讀取的數(shù)據(jù)進行撤銷,而參數(shù) io.Reader 只有 Read 方法,不支持撤銷。比如:
下邊是slice的申明和使用其實這就是一種動態(tài)的數(shù)組復制代碼 代碼如下:package main
import "fmt"func main() {d := []int{1, 2, 3} //申明一個slice這個是動態(tài)的數(shù)組,沒有長fmt.Println(d)
var q, w []intq = d[0:1] //可以定取得上邊的長度w = d[1:3]d = append(d, 2) //向其中添加元素fmt.Println(d)fmt.Printlnw。
Go語言是谷歌2009年發(fā)布的第二款開源編程語言。Go語言專門針對多處理器系統(tǒng)應用程序的編程進行了優(yōu)化,使用Go編譯的程序可以媲美C或C++代碼的速度,而且更加安全、支持并行進程。北京時間2010年1月10日,Go語言摘得了TIOBE公布的2009年年度大獎。
在谷歌公開發(fā)布的所有網(wǎng)絡應用中,均沒有使用Go,但是谷歌已經(jīng)使用該語言開發(fā)了幾個內(nèi)部項目。派克表示,Go是否會對谷歌即將推出的Chrome OS產(chǎn)生影響,還言之尚早,不過Go的確可以和Native Client配合使用。他表示“Go可以讓應用完美的運行在瀏覽器內(nèi)?!崩?,使用Go可以更高效的實現(xiàn)Wave,無論是在前端還是后臺。
Go 同時具有兩種編譯器,一種是建立在GCC基礎上的Gccgo,另外一種是分別針對64位x64和32位x86計算機的一套編譯器(6g和8g)。谷歌目前正在研發(fā)其對ARM芯片和Android設備的支持。
Google對Go寄予厚望。其設計是讓軟件充分發(fā)揮多核心處理器同步多工的優(yōu)點,并可解決面向?qū)ο蟪绦蛟O計的麻煩。它具有現(xiàn)代的程序語言特色,如垃圾回收,幫助程序設計師處理瑣碎但重要的內(nèi)存管理問題。Go的速度也非???,幾乎和C或C++程序一樣快,且能夠快速制作程序。