go 從入門到精通(二)基礎資料型別 (Elementary Data Type)和操作符__Go

來源:互聯網
上載者:User
一、檔案名稱&關鍵字&標識符 所有go源碼都是以.go結尾 標識符以字母或底線開頭,大小寫敏感 底線_是特殊標識符,使用者忽略結果 保留關鍵字 匯入包時可以設定別名

下面是保留關鍵字:

二、GO程式的基本結構

package mainimport (    "fmt")func main(){    fmt.Println("Hello world")}
任何一個代碼必須隸屬一個包 import關鍵字,引入其他包 golang可執行程式,package main 並且只有一個main入口函數 包中函數的調用,同一個函數中可以直接調用;不同包中函數,通過包名+點+函數名進行調用 包存取控制規則,大寫意味著這個函數或者變數可以匯出的,及在其他包內是可以調用的;小寫以為這個函數或者變數是私人的,包外部不能訪問。

小練習1
寫一個小程式,對於給定的一個數字n,求出所有兩兩相加等於n的組合

package mainimport (    "fmt")func add_num(n int){    for i:=0;i<=n;i++{        fmt.Printf("%d+%d=%d\n",i,n-i,n)    }}func main(){    add_num(5)}

小練習2
寫一個小程式,包含兩個包,add和main,其中add包中有兩個變數:Name,和age,請問main包中如何訪問Name和age。(用於理解go中大小寫敏感的問題)

main包中的代碼:

package main import (    "fmt"    "go_dev/day02/kexia02/add")func main() {    fmt.Println(add.Name)}

add包中的代碼

package add  var Name string = "zhaofan"var age int = 23

從結果我們可以發現我們在main包中是不能調用到add包中的age,但是是可以調用到Name
這裡就是因為大小寫問題,go中的大寫可以理解為其他語言中的public,小寫理解為private
這裡有個問題需要注意:
我們把add包中的代碼改為:

package addvar Name stringvar Age intName = "zhaofan"Age = 23

這樣也是錯誤的寫法,go作為編譯型語言,必須通過函數來進行語句的執行,而不能在函數外執行語句

小練習3
開發一個小程式,使用包別名來訪問包中的函數或變數
直接對上一個程式的main包變更

package mainimport (    "fmt"    a "go_dev/day02/kexia02/add")func main() {    fmt.Println(a.Name)    fmt.Println(a.Age)}

小練習4
每個源檔案都可以包含一個init函數,這個init函數自動被go運行架構調用,通過下面例子示範:

package mainimport (    "fmt")func init(){    fmt.Println("執行初始化函數")}func main() {    fmt.Println("hello world")}

運行結果是先列印了init函數的內容,後列印了main函數中的問題,所以init函數先與main函數執行 三、函數的聲明和注釋

函式宣告

格式為:func 函數名字(參數列表)(傳回值列表)
例子如下:
func add(){
}

func add(a int,b int) int{
}
func add(a int,b int) (int int){
}

注釋
單行注釋//
多行注釋/* */ 四、GO語言的資料類型和操作符

常見資料類型及分類

GO語言按照類別分為幾下幾種資料類型:
布爾型:true或false,例子:var b bool = true
數字類型:包括整型int和浮點float
字串類型:這裡強調一下,GO的字串是由單個位元組串連起來的Go語言的字串的位元組使用UTF-8編碼標識Unicode文本。
衍生類別型:這裡包括指標類型,數群組類型,結構化類型,Channel類型,函數類型,介面類型,Map類型

注意:
字串的時候用雙引號”“,這裡也可以用反引號`,通過反引號的方式會保留你的格式,不會對你的內容做任何轉義

位元組的時候用單引號‘’,同樣也可以通過反引號`

var cc byte = 'c' fmt.println(ccc)
var cc byte = c fmt.println(cc)
一個會列印c的ASCII,一個會列印c

關於fmt.Printf()的用法
官網地址:https://go-zh.org/pkg/fmt/

一般
%v 相應值的預設格式。在列印結構體時,“加號”標記(%+v)會添加欄位名
%#v 相應值的Go文法表示
%T 相應值的類型的Go文法表示
%% 字面上的百分比符號,並非值的預留位置

布爾
%t 單詞 true 或 false。

整數
%b 二進位表示
%c 相應Unicode碼點所表示的字元
%d 十進位表示
%o 八進位表示
%q 單引號圍繞的字元字面值,由Go文法安全地轉義
%x 十六進位表示,字母形式為小寫 a-f
%X 十六進位表示,字母形式為大寫 A-F
%U Unicode格式:U+1234,等同於 "U+%04X"

浮點數及其複合構成
%b 無小數部分的,指數為二的冪的科學計數法,與 strconv.FormatFloat
的 'b' 轉換格式一致。例如 -123456p-78
%e 科學計數法,例如 -1234.456e+78
%E 科學計數法,例如 -1234.456E+78
%f 有小數點而無指數,例如 123.456
%g 根據情況選擇 %e 或 %f 以產生更緊湊的(無末尾的0)輸出
%G 根據情況選擇 %E 或 %f 以產生更緊湊的(無末尾的0)輸出

字串與位元組切片
%s 字串或切片的無解譯位元組
%q 雙引號圍繞的字串,由Go文法安全地轉義
%x 十六進位,小寫字母,每位元組兩個字元
%X 十六進位,大寫字母,每位元組兩個字元

指標
%p 十六進位表示,首碼 0x

通過fmt.Printf() 可以格式化輸出到終端,如果想要格式化儲存到變數則是fmt.Sprintf()

數字類型

數字類型包括了:
uint8(無符號8位整型,0到255)
uint16(無符號16位整型,0到65535)
uint32(無符號32位整型,0到4294967295)
unint64(無符號64位整型,0到18446744073709551615)
int8(有符號8位整型,-128到127)
int16(有符號16位整型,-32768到32767)
int32(有符號32位整型 ,-2147483648 到 2147483647)
int64(有符號64位整型 ,-9223372036854775808到9223372036854775807)

浮點型

flat32: 32位浮點型數
flag64: 64位浮點型數
complex64:32 位實數和虛數
complex128:64 位元實數和虛數

類型轉換

舉個例子來理解: var a int = 8 轉換為int32 var b int32 = int32(a)
當我們代碼中設計到資料計算的時候,要保證兩個資料類型完全相同,
var a int 和 var b int32 是不能直接做計算處理的,這個時候就需要用到類型轉換

相關操作符
。 && || 分別表示非,與,或

== 、=、!=、 <、>、<=、>=

練習1

使用math/rand產生隨機整數,10個小於100的隨機整數以及10個隨機浮點數

package mainimport (    "fmt"    "math/rand")func rand_print(){    for i:=0;i<10;i++{        fmt.Println(rand.Int31n(100))        fmt.Println(rand.Float32())    }}func main() {    rand_print()}

但是這裡會造成每次運行程式產生的隨機數是相同的,解決方式是加入隨機種子:rand.Seed(time.Now().Unix()) 五、常量

常用cost修飾,代表永遠是唯讀不能修改
const只能修飾boolean,number(int相互關聯類型,浮點類型,complex)和string

文法
const 變數名 [變數類型] = value其中變數類型可以省略

例子
const b string = "hello"
const b int = 23

通常定義常亮的寫法

const (
a = 0
b = 1
)

進階方法
const (
a = iota
b
c
)
這裡自動回吧a賦值為0,後面的變數一次加1

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.