重慶分公司,新征程啟航
為企業提供網站建設、域名注冊、服務器等服務
為企業提供網站建設、域名注冊、服務器等服務
import "workname/packetfolder"
易門網站建設公司創新互聯公司,易門網站設計制作,有大型網站制作公司豐富經驗。已為易門上千提供企業網站建設服務。企業網站搭建\外貿網站制作要多少錢,請找那個售后服務好的易門做網站的公司定做!
導入多個包
方法調用 包名.函數//不是函數或結構體所處文件或文件夾名
packagename.Func()
前面加個點表示省略調用,那么調用該模塊里面的函數,可以不用寫模塊名稱了:
當導入一個包時,該包下的文件里所有init()函數都會被執行,然而,有些時候我們并不需要把整個包都導入進來,僅僅是是希望它執行init()函數而已。下劃線的作用僅僅是為了調用init()函數,所以無法通過包名來調用包中的其他函數
import _ package
變量聲明必須要使用否則會報錯。
全局變量運行聲明但不使用。
func 函數名 (參數1,參數2,...) (返回值a 類型a, 返回值b 類型b,...)
func 函數名 (參數1,參數2,...) (返回值類型1, 返回值類型2,...)
func (this *結構體名) 函數名(參數 string) (返回值類型1, 返回值類型2){}
使用大小來區分函數可見性
大寫是public類型
小寫是private類型
func prifunc int{}
func pubfunc int{}
聲明靜態變量
const value int
定義變量
var value int
聲明一般類型、接口和結構體
聲明函數
func function () int{}
go里面所有的空值對應如下
通道類型
內建函數 new 用來分配內存,它的第一個參數是一個類型,不是一個值,它的返回值是一個指向新分配類型零值的指針
func new(Type) *Type
[這位博主有非常詳細的分析]
Go 語言支持并發,我們只需要通過 go 關鍵字來開啟 goroutine 即可。
goroutine 是輕量級線程,goroutine 的調度是由 Golang 運行時進行管理的。
同一個程序中的所有 goroutine 共享同一個地址空間。
語法格式如下:
通道(channel)是用來傳遞數據的一個數據結構。
通道的聲明
通道可用于兩個 goroutine 之間通過傳遞一個指定類型的值來同步運行和通訊。操作符 - 用于指定通道的方向,發送或接收。如果未指定方向,則為雙向通道。
[這里有比較詳細的用例]
go里面的空接口可以指代任何類型(無論是變量還是函數)
聲明空接口
go里面的的強制類型轉換語法為:
int(data)
如果是接口類型的強制轉成其他類型的語法為:
go里面的強制轉換是將值復制過去,所以在數據量的時候有比較高的運行代價
Go語言作為出現比較晚的一門編程語言,在其原生支持高并發、云原生等領域的優秀表現,像目前比較流行的容器編排技術Kubernetes、容器技術Docker都是用Go語言寫的,像Java等其他面向對象的語言,雖然也能做云原生相關的開發,但是支持的程度遠沒有Go語言高,憑借其語言特性和簡單的編程方式,彌補了其他編程語言一定程度上的不足,一度成為一個熱門的編程語言。
最近在學習Go語言,我之前使用過C#、Java等面向對象編程的語言,發現其中有很多的編程方式和其他語言有區別的地方,好記性不如爛筆頭,總結一下,和其他語言做個對比。這里只總結差異的地方,具體的語法不做詳細的介紹。
種一棵樹最好的時間是十年前,其次是現在。
3)變量初始化時候可以和其他語言一樣直接在變量后面加等號,等號后面為要初始化的值,也可以使用變量名:=變量值的簡單方式
3)變量賦值 Go語言的變量賦值和多數語言一致,但是Go語言提供了多重賦值的功能,比如下面這個交換i、j變量的語句:
在不支持多重賦值的語言中,交換兩個變量的值需要引入一個中間變量:
4)匿名變量
在使用其他語言時,有時候要獲取一個值,卻因為該函數返回多個值而不得不定義很多沒有的變量,Go語言可以借助多重返回值和匿名變量來避免這種寫法,使代碼看起來更優雅。
假如GetName()函數返回3個值,分別是firstName,lastName和nickName
若指向獲得nickName,則函數調用可以這樣寫
這種寫法可以讓代碼更清晰,從而大幅降低溝通的復雜度和維護的難度。
1)基本常量
常量使用關鍵字const 定義,可以限定常量類型,但不是必須的,如果沒有定義常量的類型,是無類型常量
2)預定義常量
Go語言預定義了這些常量 true、false和iota
iota比較特殊,可以被任務是一個可被編譯器修改的常量,在每個const關鍵字出現時被重置為0,然后在下一個const出現之前每出現一個iota,其所代表的數字會自動加1.
3)枚舉
1)int 和int32在Go語言中被認為是兩種不同類型的類型
2)Go語言定義了兩個浮點型float32和float64,其中前者等價于C語言的float類型,后者等價于C語言的double類型
3)go語言支持復數類型
復數實際上是由兩個實數(在計算機中使用浮點數表示)構成,一個表示實部(real)、一個表示虛部(imag)。也就是數學上的那個復數
復數的表示
實部與虛部
對于一個復數z=complex(x,y),就可以通過Go語言內置函數real(z)獲得該復數的實部,也就是x,通過imag(z)獲得該復數的虛部,也就是y
4)數組(值類型,長度在定義后無法再次修改,每次傳遞都將產生一個副本。)
5)數組切片(slice)
數組切片(slice)彌補了數組的不足,其數據結構可以抽象為以下三個變量:
6)Map 在go語言中Map不需要引入任何庫,使用很方便
Go循環語句只支持for關鍵字,不支持while和do-while
goto語句的語義非常簡單,就是跳轉到本函數內的某個標簽
今天就介紹到這里,以后我會在總結Go語言在其他方面比如并發編程、面向對象、網絡編程等方面的不同及使用方法。希望對大家有所幫助。
1、基本數據類型
bool
string
int int8 int16 int32 int64
uint uint8 uint16 uint32 uint64 uintptr
byte // alias for int8
rune // alias for int32,represents a Unicode code point
float32 float64
complex64 complex128
常量定義
2、類型轉換
(1)Go語言不允許隱式類型轉換(不支持小位數類型向大位數類型轉)
(2)別名和原有類型也不能進行隱式類型轉換(type MyInt int64 = int64)
3、類型的預定義值
1.math.MaxInt64
2.math.MaxFloat64
3.math.MaxUInt32
4、指針類型
(1)不支持指針運算
(2)string是值類型,其默認的初始化值為空字符串,而不是nil
5、算術運算符
+ - * / % ++ --(不支持前置++ --)
6、比較運算符
#== != = =
(1)比較數組
相同維數且含有形同個數元素的數組才可以比較
每個元素都相同的才相等
7、位運算符
| ^
^ (按位置零) a (^b)
1 ^ 0 1
1 ^ 1 0
0 ^ 1 0
0 ^ 0 0
8、條件與循環
(1)循環
Go 語?僅?持循環關鍵字 for
(2)條件
9、數組和切片
數組截取,索引下標從0開始計數
a[開始索引(包含), 結束索引(不包含)]
a := [...]int{1, 2, 3, 4, 5}
a[1:2] //2
a[1:3] //2,3
a[1:len(a)] //2,3,4,5
a[1:] //2,3,4,5
a[:3] //1,2,3
切片內部結構
9、Map
9、字符串
Unicode UTF8
常?字符串函數