go語言spint教程,print gogo

Go語言基礎語法(一)

本文介紹一些Go語言的基礎語法。

成都創新互聯公司專注于平遙企業網站建設,響應式網站建設,商城網站開發。平遙網站建設公司,為平遙等地區提供建站服務。全流程按需求定制設計,專業設計,全程項目跟蹤,成都創新互聯公司專業和態度為您提供的服務

先來看一個簡單的go語言代碼:

go語言的注釋方法:

代碼執行結果:

下面來進一步介紹go的基礎語法。

go語言中格式化輸出可以使用 fmt 和 log 這兩個標準庫,

常用方法:

示例代碼:

執行結果:

更多格式化方法可以訪問中的fmt包。

log包實現了簡單的日志服務,也提供了一些格式化輸出的方法。

執行結果:

下面來介紹一下go的數據類型

下表列出了go語言的數據類型:

int、float、bool、string、數組和struct屬于值類型,這些類型的變量直接指向存在內存中的值;slice、map、chan、pointer等是引用類型,存儲的是一個地址,這個地址存儲最終的值。

常量是在程序編譯時就確定下來的值,程序運行時無法改變。

執行結果:

執行結果:

Go 語言的運算符主要包括算術運算符、關系運算符、邏輯運算符、位運算符、賦值運算符以及指針相關運算符。

算術運算符:

關系運算符:

邏輯運算符:

位運算符:

賦值運算符:

指針相關運算符:

下面介紹一下go語言中的if語句和switch語句。另外還有一種控制語句叫select語句,通常與通道聯用,這里不做介紹。

if語法格式如下:

if ... else :

else if:

示例代碼:

語法格式:

另外,添加 fallthrough 會強制執行后面的 case 語句,不管下一條case語句是否為true。

示例代碼:

執行結果:

下面介紹幾種循環語句:

執行結果:

執行結果:

也可以通過標記退出循環:

--THE END--

GO語言學習系列八——GO函數(func)的聲明與使用

GO是編譯性語言,所以函數的順序是無關緊要的,為了方便閱讀,建議入口函數 main 寫在最前面,其余函數按照功能需要進行排列

GO的函數 不支持嵌套,重載和默認參數

GO的函數 支持 無需聲明變量,可變長度,多返回值,匿名,閉包等

GO的函數用 func 來聲明,且左大括號 { 不能另起一行

一個簡單的示例:

輸出為:

參數:可以傳0個或多個值來供自己用

返回:通過用 return 來進行返回

輸出為:

上面就是一個典型的多參數傳遞與多返回值

對例子的說明:

按值傳遞:是對某個變量進行復制,不能更改原變量的值

引用傳遞:相當于按指針傳遞,可以同時改變原來的值,并且消耗的內存會更少,只有4或8個字節的消耗

在上例中,返回值 (d int, e int, f int) { 是進行了命名,如果不想命名可以寫成 (int,int,int){ ,返回的結果都是一樣的,但要注意:

當返回了多個值,我們某些變量不想要,或實際用不到,我們可以使用 _ 來補位,例如上例的返回我們可以寫成 d,_,f := test(a,b,c) ,我們不想要中間的返回值,可以以這種形式來舍棄掉

在參數后面以 變量 ... type 這種形式的,我們就要以判斷出這是一個可變長度的參數

輸出為:

在上例中, strs ...string 中, strs 的實際值是b,c,d,e,這就是一個最簡單的傳遞可變長度的參數的例子,更多一些演變的形式,都非常類似

在GO中 defer 關鍵字非常重要,相當于面相對像中的析構函數,也就是在某個函數執行完成后,GO會自動這個;

如果在多層循環中函數里,都定義了 defer ,那么它的執行順序是先進后出;

當某個函數出現嚴重錯誤時, defer 也會被調用

輸出為

這是一個最簡單的測試了,當然還有更復雜的調用,比如調試程序時,判斷是哪個函數出了問題,完全可以根據 defer 打印出來的內容來進行判斷,非常快速,這種留給你們去實現

一個函數在函數體內自己調用自己我們稱之為遞歸函數,在做遞歸調用時,經常會將內存給占滿,這是非常要注意的,常用的比如,快速排序就是用的遞歸調用

本篇重點介紹了GO函數(func)的聲明與使用,下一篇將介紹GO的結構 struct

講講go語言的結構體

作為C語言家族的一員,go和c一樣也支持結構體。可以類比于java的一個POJO。

在學習定義結構體之前,先學習下定義一個新類型。

新類型 T1 是基于 Go 原生類型 int 定義的新自定義類型,而新類型 T2 則是 基于剛剛定義的類型 T1,定義的新類型。

這里要引入一個底層類型的概念。

如果一個新類型是基于某個 Go 原生類型定義的, 那么我們就叫 Go 原生類型為新類型的底層類型

在上面的例子中,int就是T1的底層類型。

但是T1不是T2的底層類型,只有原生類型才可以作為底層類型,所以T2的底層類型還是int

底層類型是很重要的,因為對兩個變量進行顯式的類型轉換,只有底層類型相同的變量間才能相互轉換。底層類型是判斷兩個類型本質上是否相同的根本。

這種類型定義方式通常用在 項目的漸進式重構,還有對已有包的二次封裝方面

類型別名表示新類型和原類型完全等價,實際上就是同一種類型。只不過名字不同而已。

一般我們都是定義一個有名的結構體。

字段名的大小寫決定了字段是否包外可用。只有大寫的字段可以被包外引用。

還有一個點提一下

如果換行來寫

Age: 66,后面這個都好不能省略

還有一個點,觀察e3的賦值

new返回的是一個指針。然后指針可以直接點號賦值。這說明go默認進行了取值操作

e3.Age 等價于 (*e3).Age

如上定義了一個空的結構體Empty。打印了元素e的內存大小是0。

有什么用呢?

基于空結構體類型內存零開銷這樣的特性,我們在日常 Go 開發中會經常使用空 結構體類型元素,作為一種“事件”信息進行 Goroutine 之間的通信

這種以空結構體為元素類建立的 channel,是目前能實現的、內存占用最小的 Goroutine 間通信方式。

這種形式需要說的是幾個語法糖。

語法糖1:

對于結構體字段,可以省略字段名,只寫結構體名。默認字段名就是結構體名

這種方式稱為 嵌入字段

語法糖2:

如果是以嵌入字段形式寫的結構體

可以省略嵌入的Reader字段,而直接訪問ReaderName

此時book是一個各個屬性全是對應類型零值的一個實例。不是nil。這種情況在Go中稱為零值可用。不像java會導致npe

結構體定義時可以在字段后面追加標簽說明。

tag的格式為反單引號

tag的作用是可以使用[反射]來檢視字段的標簽信息。

具體的作用還要看使用的場景。

比如這里的tag是為了幫助 encoding/json 標準包在解析對象時可以利用的規則。比如omitempty表示該字段沒有值就不打印出來。

go語言中怎樣把string類型轉化成int類型

有兩種方法,根據例子說明: String - ints="12345";int i;第一種方法:i=Integer.parseInt(s);第二種方法:i=Integer.valueOf(s).intValue();第一種方法:i=Integer.parseInt(s);//直接使用靜態方法,不會產生多余的對象,但會拋出異常第二種.

網頁標題:go語言spint教程,print gogo
文章網址:http://m.kartarina.com/article46/hdohhg.html

成都網站建設公司_創新互聯,為您提供云服務器網站改版小程序開發網站建設ChatGPT網頁設計公司

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

營銷型網站建設
主站蜘蛛池模板: 亚洲a∨无码男人的天堂| 免费人妻av无码专区| 东京热人妻无码一区二区av| 亚洲无码精品浪潮| 野花在线无码视频在线播放| 亚洲成AV人在线播放无码| 无码毛片内射白浆视频| 亚洲人成影院在线无码观看| 日韩人妻无码中文字幕视频| 亚洲aⅴ无码专区在线观看春色| 亚洲 另类 无码 在线| 日韩AV无码中文无码不卡电影| 中出人妻中文字幕无码| 亚洲?V无码乱码国产精品| 中文无码日韩欧免费视频| 国产精品无码亚洲一区二区三区| 国产免费av片在线无码免费看| 国产成年无码AV片在线韩国| 无码播放一区二区三区| 在线播放无码后入内射少妇| 少妇久久久久久人妻无码| 午夜不卡久久精品无码免费| 国产精品午夜无码av体验区| 永久免费av无码网站韩国毛片| 亚洲AV无码一区二区乱孑伦AS| 无码精品前田一区二区| 精品国产性色无码AV网站| 久久久久亚洲av无码专区导航| 日韩精品无码免费专区午夜不卡| 人妻精品无码一区二区三区| 精品无码成人片一区二区98| 无码人妻精品中文字幕免费 | 久久AV无码精品人妻糸列| 亚洲乱亚洲乱少妇无码| WWW久久无码天堂MV| 无码精品国产va在线观看dvd| 亚洲熟妇无码一区二区三区| 中文字幕乱偷无码av先锋蜜桃 | 99无码精品二区在线视频| 无码无套少妇毛多18p| 亚洲AV无码成人网站久久精品大|