Go語言入門自學(xué)(一)

GoLang

首先介紹下GO語言的起源

Go語言是一個(gè)開源的編程語言,它能讓構(gòu)造簡單,可靠且高效的軟件變得容易。
GO是從2007年末由Robert Griesemer, Rob Pike, Ken Thompson主持開發(fā)。2009年11月開源,在2012年早些時(shí)候發(fā)布了GO 1穩(wěn)定版本?,F(xiàn)在GO的開發(fā)已經(jīng)是完全開放的,并且擁有一個(gè)活躍的社區(qū)。

Go語言最主要的特性

  • 自動(dòng)垃圾回收
  • 更豐富的內(nèi)置類型
  • 函數(shù)多返回值
  • 錯(cuò)誤處理
  • 匿名函數(shù)和閉包
  • 類型和接口
  • 并發(fā)編程
  • 反射
  • 語言交互性

Go語言結(jié)構(gòu)

在學(xué)習(xí)之前先來了解下Go語言最簡單程序結(jié)構(gòu)。
Go語言的基礎(chǔ)組成有一下幾個(gè)部分

  • 包聲明
  • 引入包
  • 函數(shù)
  • 變量
  • 語句&表達(dá)式
  • 注釋
package main
import "fmt"
func main(){
    fmt.Println("My,first Go applition")
}

讓我們來看下以上程序的各個(gè)部分

  • package main定義了包名,你必須在源文件中非注釋的第一行指明這個(gè)文件屬于哪個(gè)包,每個(gè)Go應(yīng)用程序都包含一個(gè)名為main的包。
  • import "fmt"是告訴Go編輯器這個(gè)程序需要使用fmt包(的函數(shù),或其他元素),fmt包實(shí)現(xiàn)了格式化IO(輸入/輸出)的函數(shù)。
  • func main()是程序開始執(zhí)行的函數(shù)。main函數(shù)是每一個(gè)可執(zhí)行程序所必須包含的,一般來說都是在啟動(dòng)后第一個(gè)執(zhí)行的函數(shù)(如果有init()函數(shù)則會(huì)先執(zhí)行該函數(shù))
  • /*...*/是Go語言的注釋標(biāo)識(shí)。
  • fmt.Println(...)可以將字符串輸出到控制臺(tái),并在最后自動(dòng)增加換行字符 \n,使用 fmt.Print("My,first Go applition\n") 可以得到相同的結(jié)果。
  • 當(dāng)標(biāo)識(shí)符(包括常量、變量、類型、函數(shù)名、結(jié)構(gòu)字段等等)以一個(gè)大寫字母開頭,如:Group1,那么使用這種形式的標(biāo)識(shí)符的對(duì)象就可以被外部包的代碼所使用(客戶端程序需要先導(dǎo)入這個(gè)包),這被稱為導(dǎo)出(像面向?qū)ο笳Z言中的 public);標(biāo)識(shí)符如果以小寫字母開頭,則對(duì)包外是不可見的,但是他們?cè)谡麄€(gè)包的內(nèi)部是可見并且可用的(像面向?qū)ο笳Z言中的 protected )。

Go語言基礎(chǔ)語法

Go標(biāo)記

Go 程序可以由多個(gè)標(biāo)記組成,可以是關(guān)鍵字,標(biāo)識(shí)符,常量,字符串,符號(hào)。如以下 GO 語句由 6 個(gè)標(biāo)記組成:

fmt.Println("Hello, World!")
1. fmt
2. .
3. Println
4. (
5. "Hello, World!"
6. )

行分隔符

在 Go 程序中,一行代表一個(gè)語句結(jié)束。每個(gè)語句不需要像 C 家族中的其它語言一樣以分號(hào) ; 結(jié)尾,因?yàn)檫@些工作都將由 Go 編譯器自動(dòng)完成。
如果你打算將多個(gè)語句寫在同一行,它們則必須使用 ; 人為區(qū)分,但在實(shí)際開發(fā)中我們并不鼓勵(lì)這種做法。

標(biāo)識(shí)符

標(biāo)識(shí)符用來命名變量、類型等程序?qū)嶓w。一個(gè)標(biāo)識(shí)符實(shí)際上就是一個(gè)或是多個(gè)字母(AZ和az)數(shù)字(0~9)、下劃線_組成的序列,但是第一個(gè)字符必須是字母或下劃線而不能是數(shù)字。

//有效的標(biāo)識(shí)符
mahesh   kumar   abc   move_name   a_123
myname50   _temp   j   a23b9   retVal
//無效的標(biāo)識(shí)符
123asd //(以數(shù)字開頭)
case   //(Go 語言的關(guān)鍵字)
a+b    //(運(yùn)算符是不允許的)

關(guān)鍵字

下面列舉了 Go 代碼中會(huì)使用到的 25 個(gè)關(guān)鍵字或保留字

break default func interface select
case defer go map struct
chan else goto package switch
const fallthrough if range type
continue for import return var

除了以上介紹的這些關(guān)鍵字,Go 語言還有 36 個(gè)預(yù)定義標(biāo)識(shí)符

append bool byte cap close complex complex64 complex128 uint16
copy false float32 float64 imag int int8 int16 uint32
int32 int64 iota len make new nil panic uint64
print println real recover string true uint uint8 uintptr

程序一般由關(guān)鍵字、常量、變量、運(yùn)算符、類型和函數(shù)組成。
程序中可能會(huì)使用到這些分隔符:括號(hào) (),中括號(hào) [] 和大括號(hào) {}。
程序中可能會(huì)使用到這些標(biāo)點(diǎn)符號(hào):.、,、;、: 和 …

Go 語言的空格

Go 語言中變量的聲明必須使用空格隔開

var age int;

Go語言結(jié)構(gòu)小結(jié)

導(dǎo)入多包時(shí)

import "fmt"
import "io"
//也可以
import {
    "fmt",
    "io"
}

Go 程序的一般結(jié)構(gòu): basic_structure.go

//當(dāng)前程序包名
package main
//導(dǎo)入其他包
import "fmt"
//常量定義
const PI = 3.14
//全局變量聲明
var name = "duxian"
//一般類型聲明
type newType int
//結(jié)構(gòu)的聲明
type gopher struct()
//接口的聲明
type golang interface()
//由main函數(shù)作為程序入口點(diǎn)啟動(dòng)
func main(){
    Println(name)
}

GO語言的數(shù)據(jù)類型

在Go編程語言中,數(shù)據(jù)類型用于聲明函數(shù)和變量。
數(shù)據(jù)類型的出現(xiàn)是為了把數(shù)據(jù)分成所需內(nèi)存大小不同的數(shù)據(jù),編程的時(shí)候需要用大數(shù)據(jù)的時(shí)候才需要申請(qǐng)大內(nèi)存,就可以充分利用內(nèi)存。

Go語言按類別有以下幾種數(shù)據(jù)類型

  • 布爾型
    布爾型的值只可以是常量 true 或者 false。一個(gè)簡單的例子:var b bool = true。
  • 數(shù)字類型
    整型 int 和浮點(diǎn)型 float32、float64,Go 語言支持整型和浮點(diǎn)型數(shù)字,并且原生支持復(fù)數(shù),其中位的運(yùn)算采用補(bǔ)碼。
  • 字符竄類型
    Go語言的字符串的字節(jié)使用UTF-8編碼標(biāo)識(shí)Unicode文本
  • 派生類型
  • 指針類型
  • 數(shù)組類型
  • 結(jié)構(gòu)化類型
  • Channel類型
  • 函數(shù)類型
  • 切片類型
  • 接口類型
  • Map類型

數(shù)字類型

整數(shù)型

  • uint8
    無符號(hào) 8 位整型 (0 到 255)
  • uint16
    無符號(hào) 16 位整型 (0 到 65535)
  • uint32
    無符號(hào) 32 位整形 (0 到 4294967295)
  • uint64
    無符號(hào) 64 位整型 (0 到 18446744073709551615)
  • int8
    有符號(hào) 8 位整型 (-128 到 127)
  • int16
    有符號(hào) 16 位整型 (-32768 到 32767)
  • int32
    有符號(hào) 32 位整型 (-2147483648 到 2147483647)
  • int64
    有符號(hào) 64 位整型 (-9223372036854775808 到 9223372036854775807)

浮點(diǎn)型

  • float32
    IEEE-754 32位浮點(diǎn)型數(shù)
  • float64
    IEEE-754 64位浮點(diǎn)型數(shù)
  • complex64
    32 位實(shí)數(shù)和虛數(shù)
  • complex128
    64 位實(shí)數(shù)和虛數(shù)

其他數(shù)字類型

  • byte
    類似 uint8
  • rune
    類似 int32
  • uint
    32 或 64 位
  • int
    與 uint 一樣大小
  • uintptr
    無符號(hào)整型,用于存放一個(gè)指針

Go語言變量

變量來源于數(shù)學(xué),是計(jì)算機(jī)語言中能存儲(chǔ)計(jì)算結(jié)果或能表示值抽象概念。變量可以通過變量名訪問。
Go 語言變量名用字母,數(shù)字,下劃線組成。其中首字母不能使數(shù)字。
聲明變量的一般形式是使用var關(guān)鍵字

var identifier type

變量聲明

//第一種,指定變量類型,聲明后若不賦值,使用默認(rèn)值。
var v_name v_type
v_name = value
//第二種,根據(jù)值自行判定變量類型。
var v_name = value
//第三種,省略var, 注意 :=左側(cè)的變量不應(yīng)該是已經(jīng)聲明過的,否則會(huì)導(dǎo)致編譯錯(cuò)誤。
v_name := value
//// 例如
var a int = 10
var b = 10
c := 10

多變量聲明

//類型相同多個(gè)變量, 非全局變量
var vname1, vname2, vname3 type
vname1, vname2, vname3 = v1, v2, v3

var vname1, vname2, vname3 = v1, v2, v3 //和python很像,不需要顯示聲明類型,自動(dòng)推斷

vname1, vname2, vname3 := v1, v2, v3 //出現(xiàn)在:=左側(cè)的變量不應(yīng)該是已經(jīng)被聲明過的,否則會(huì)導(dǎo)致編譯錯(cuò)誤

// 這種因式分解關(guān)鍵字的寫法一般用于聲明全局變量
var (
    vname1 v_type1
    vname2 v_type2
)

值類型和引用類型

所有像 int、float、bool 和 string 這些基本類型都屬于值類型

簡短形式,使用 := 賦值操作符

全局變量是允許聲明但不使用,但是函數(shù)內(nèi)變量聲明后必須使用否則會(huì)得到錯(cuò)誤 “變量 declared and not used”

自學(xué)來源

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 官方網(wǎng)站:https://golang.org/標(biāo)準(zhǔn)庫文檔:https://golang.org/pkg/在線編碼...
    技術(shù)學(xué)習(xí)閱讀 2,416評(píng)論 2 39
  • 前言 人生苦多,快來 Kotlin ,快速學(xué)習(xí)Kotlin! 什么是Kotlin? Kotlin 是種靜態(tài)類型編程...
    任半生囂狂閱讀 26,692評(píng)論 9 118
  • ?1 C語言程序的結(jié)構(gòu)認(rèn)識(shí) 用一個(gè)簡單的c程序例子,介紹c語言的基本構(gòu)成、格式、以及良好的書寫風(fēng)格,使讀者對(duì)c語...
    CONLYOUC閱讀 8,872評(píng)論 9 66
  • 在去往學(xué)校的汽車上,心情并不是多么美好。陰雨綿綿的天氣,不是靠窗的座位,無聊的刷著手機(jī),看著紛紛嚷嚷的世間...
    冷澈12閱讀 563評(píng)論 0 0
  • 179站請(qǐng)大家關(guān)注6碼---4碼 單挑參考 參考就是 【殺1-2碼 0=0】 組合2配46拖79 單挑 組選9碼 ...
    179幸運(yùn)彩吧閱讀 208評(píng)論 0 0

友情鏈接更多精彩內(nèi)容