網(wǎng)站首頁 編程語言 正文
Go語言身世簡介
Go(又稱 Golang)是 Google 的 Robert Griesemer,Rob Pike 及 Ken Thompson 開發(fā)的一種靜態(tài)強(qiáng)類型、編譯型語言。Go 語言語法與 C 相近,但功能上有:內(nèi)存安全,GC(垃圾回收),結(jié)構(gòu)形態(tài)及 CSP-style 并發(fā)計(jì)算。
Go語言的第一個(gè)程序
我們使用的IDE
工具為GoLand
(沒錯(cuò),又是Jetbrains
家的產(chǎn)物,我是重度愛好者),在寫Go
程序之前,我們首先得配置好Go
語言的開發(fā)環(huán)境,這里就不做贅述,相信憑借各位的能力,一定能夠沒問題
package main ? import "fmt" ? func main() { fmt.Println(123456) }
這里是Go
語言的第一個(gè)程序,我們把這個(gè)程序拆分下來細(xì)看一下
首先是package
,相信有語言基礎(chǔ)的同學(xué)都能夠明白這個(gè)是包的意思,我們導(dǎo)入的是main
的包,讀者可以理解為一種約定俗成,沒有main
的話,你的Go
程序會(huì)出現(xiàn)奇奇怪怪的問題
其次,是import
,這里指的是導(dǎo)入的意思,我們導(dǎo)入了fmt
這個(gè)庫,經(jīng)過求證,fmt
該庫是用來格式化輸入輸出,也就是我們所說的java中的System.out.println();
或者是JavaScript中的console.log()
,這么一說,相信大家也不陌生
Go語言的數(shù)據(jù)類型
在介紹數(shù)據(jù)類型之前,想為讀者介紹的是,Go語言是沒有以分號(hào)結(jié)尾的這個(gè)習(xí)慣,而且是先聲明var類型(一般情況下都是var類型的數(shù)據(jù)),緊接著聲明變量名和數(shù)據(jù)類型
var name string var age int var sex bool
同時(shí)我們還加入了一種懶人寫法,想到這里大家可能就想到了結(jié)構(gòu)體,將同種聲明含義的變量放到一個(gè)大括號(hào)里面,沒錯(cuò),在Go語言中也能過實(shí)現(xiàn)這一操作
var ( name string age int sex bool pwd float32 )
這么一看,似乎下面的方法要高效的多
Go語言匿名變量
很多小伙伴第一次看到這個(gè)匿名變量,有點(diǎn)發(fā)懵。其實(shí)可以這么理解,匿名變量顧名思義,就是不想讓人知道,在Go
語言中我們可以用_
來代替,要注意的是:匿名變量不占用命名空間,不會(huì)分配內(nèi)存
func foo() (int, string) { ? ?return 10, "Q1mi" } func main() { ? ?x, _ := foo() ? ?_, y := foo() ? ?fmt.Println("x=", x) ? ?fmt.Println("y=", y) }
在這個(gè)代碼塊中我們可以看到,我們定義了一個(gè)foo
方法用于保存相關(guān)參數(shù),第一個(gè)參數(shù)類型為int
,第二個(gè)參數(shù)類型為string
;緊接著我們在main
方法中,使用匿名變量去調(diào)用foo
方法,為了體現(xiàn)差異,我們進(jìn)行二次方法調(diào)用,最后輸出的結(jié)果顯而易見(寫上方的demo
是為了驗(yàn)證匿名變量的使用)
Go語言的數(shù)據(jù)類型
iota
是go
語言的常量計(jì)數(shù)器,它只能在常量的表達(dá)式中使用(作者覺得這一點(diǎn)非常的人性化,因?yàn)橐酝?code>java中,這一功能需要聲明一個(gè)變量+for循環(huán)才能實(shí)現(xiàn),go語言yyds! )
貼一張從Google找的圖片,請讀者自行查閱數(shù)據(jù)類型及其所對(duì)應(yīng)的范圍
類型 | 長度(字節(jié)) | 默認(rèn)值 | 說明 |
---|---|---|---|
bool | 1 | false | |
byte | 1 | 0 | uint8 |
rune | 4 | 0 | Unicode Code Point, int32 |
int, uint | 4或8 | 0 | 32 或 64 位 |
int8, uint8 | 1 | 0 | -128 ~ 127, 0 ~ 255,byte是uint8 的別名 |
int16, uint16 | 2 | 0 | -32768 ~ 32767, 0 ~ 65535 |
int32, uint32 | 4 | 0 | -21億~ 21億, 0 ~ 42億,rune是int32 的別名 |
int64, uint64 | 8 | 0 | |
float32 | 4 | 0.0 | |
float64 | 8 | 0.0 | |
complex64 | 8 | ||
complex128 | 16 | ||
uintptr | 4或8 | 以存儲(chǔ)指針的 uint32 或 uint64 整數(shù) | |
array | 值類型 | ||
struct | 值類型 | ||
string | “” | UTF-8 字符串 | |
slice | nil | 引用類型 | |
map | nil | 引用類型 | |
channel | nil | 引用類型 | |
interface | nil | 接口 | |
function | nil | 函數(shù) |
至于讀者想問的字符串轉(zhuǎn)化、轉(zhuǎn)義字符這些問題,作者并沒有給出詳細(xì)的介紹,因?yàn)檫@些相關(guān)介紹讀者都是能夠直接在網(wǎng)上查閱到的,在此不作贅述
Go語言中的數(shù)組
今天作者花了大量的時(shí)間來學(xué)習(xí)Go
語言,其中有一半的時(shí)間都花在了數(shù)組上面
首先我們來看Go
語言文檔中對(duì)于數(shù)組的定義
1. 數(shù)組:是同一種數(shù)據(jù)類型的固定長度的序列。
2. 數(shù)組定義:var a [len]int,比如:var a [5]int,數(shù)組長度必須是常量,且是類型的組成部分。一旦定義,長度不能變。
3. 長度是數(shù)組類型的一部分,因此,var a[5] int和var a[10]int是不同的類型。
4. 數(shù)組可以通過下標(biāo)進(jìn)行訪問,下標(biāo)是從0開始,最后一個(gè)元素下標(biāo)是:len-1
很多讀者反應(yīng):你給我們看這些也沒用啊,沒有實(shí)際的例子我們看不懂!!!
一維數(shù)組
func main() { a := [3]int{1, 2} b := [...]int{1, 2, 3, 4} c := [5]int{2: 100, 4: 100} d := [2]struct { name string age ?uint8 }{ {"user1", 10}, {"user2", 20}, } fmt.Println(a, b, c, d) }
對(duì)于上方代碼,我們做出如下的詳細(xì)解析
- 首先我們可以看到
a
變量開拓了一個(gè)數(shù)組長度為3的變量,但是只聲明了2個(gè)變量,還有一個(gè)變量未進(jìn)行變量初始化,在Go語言中,我們將未定義的數(shù)組的初始化變量為0 - 其次我們可以看到
b
變量開拓了一個(gè)任意長度的數(shù)組,同時(shí)進(jìn)行相應(yīng)的賦值操作,在Go語言中,如果我們不確定數(shù)組的長度,我們就可以使用...
來代替數(shù)組的長度,類似于一種動(dòng)態(tài)數(shù)組 - 緊接著我們可以看到
c
變量比較特殊,在變量里面聲明了相關(guān)數(shù)值,c
數(shù)組里面的第一個(gè)2是代表從第三個(gè)開始輸出100,4同理 - 最后數(shù)組d采用結(jié)構(gòu)體的形式,在結(jié)構(gòu)體之前聲明該結(jié)構(gòu)體所需的容量
這里就有小伙伴要問了,能不能使用...
來代替結(jié)構(gòu)體前面的數(shù)字,作者給出的答復(fù)是:可以但沒必要;因?yàn)槟阆旅娴睦ㄌ?hào)里面要聲明具體的數(shù)據(jù)類型所對(duì)應(yīng)的值,你既然能夠知道具體有幾個(gè)數(shù)來對(duì)應(yīng)數(shù)據(jù)類型,又何必使用...
來代替呢?
二維數(shù)組
func main() { a := [2][3]int{{1, 2, 3}, {4, 5, 6}} b := [...][2]int{{1, 1}, {2, 2}, {3, 3}} fmt.Println(arr0, arr1) fmt.Println(a, b) }
對(duì)于上方代碼,我們做出如下的詳細(xì)解析
- 首先我們可以看到
a
數(shù)組定義了一個(gè)長2寬3的數(shù)組,第一個(gè)數(shù)組里面存放的是123,第二個(gè)數(shù)組里面存放的是456,相信這一步對(duì)絕大部分讀者來說并無異議 - 其次,我們可以看到的是,在b數(shù)組中,我們使用
...
來自定義數(shù)組長度,這一點(diǎn)有效的解決了動(dòng)態(tài)數(shù)組容量的問題。值得一提的是,在二維數(shù)組里面,我們不能將第二個(gè)維度的數(shù)組設(shè)置成...
,否則數(shù)組的長度及定義就會(huì)出現(xiàn)歧義,具體原因讀者自行想象
原文鏈接:https://juejin.cn/post/7168294951602651143
相關(guān)推薦
- 2022-03-31 C#客戶端HttpClient請求認(rèn)證及數(shù)據(jù)傳輸_C#教程
- 2022-06-13 ASP.NET?Core中的靜態(tài)文件介紹_實(shí)用技巧
- 2022-07-19 CentOS8 服務(wù)器連接超時(shí)自動(dòng)斷開問題解決
- 2023-02-26 C++?ROS與boost:bind()使用詳解_C 語言
- 2022-11-12 c++自定義sort()函數(shù)的排序方法介紹_C 語言
- 2022-06-01 Python讀取csv文件做K-means分析詳情_python
- 2023-06-17 解讀C語言非void函數(shù)卻沒有return會(huì)怎么樣_C 語言
- 2022-07-29 詳解Go語言中配置文件使用與日志配置_Golang
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支