網站首頁 編程語言 正文
一、Golang 簡介
Golang(又稱為 Go)是 Google 公司開發(fā)出的一種靜態(tài)強類型、編譯型、并發(fā)型,并具有垃圾回收功能的編程語言。
1.Go 語言的特點
Go 語言保證了既能夠達到 靜態(tài)編譯語言的安全和性能,又達到了 動態(tài)開發(fā)語言維護的高效率,使用一個表達式來形容 Go 語言:Go = C + Python,說明 Go 語言既有 C 靜態(tài)語言程序的運行速度,又能達到 Python 動態(tài)語言的快速開發(fā)。
1)從 C 語言中繼承了很多理念,包括表達式語法,控制結構,基礎數據類型,調用參數傳值,指針 等等,也保留了和 C 語言一樣的編譯執(zhí)行方式及弱化的指針。
func testPtr(num *int) { *num = 20 }
2)引入 包的概念,用于組織程序結構,Go 語言的 一個文件都要歸于一個包,而不能單獨存在。
package main import "fmt" func main() { fmt.Println("Hello World") }
3)垃圾回收機制,內存自動回收,不需要開發(fā)人員管理。
4)天然并發(fā):從語言層面上支持并發(fā),實現簡單;goroutine
輕量級線程,可實現大并發(fā)處理,高效利用多核;基于 CPS 并發(fā)模型實現。
5)吸收了 管道通信機制,形成 Go 語言特有的管道 Channel
,通過管道 Channel
,我們可以實現不同 goroute
間的互相通信。
6)函數可以返回多個值:
func getSumAndSub(sum int,sub int) (int,int) { Sum := sum + sub Sub := sum - sub return Sum,Sub }
7)新的創(chuàng)新,比如:Slice
切片,Defer
延時執(zhí)行等。
2.Golang 的變量作用域
局部變量: 在函數內部定義的變量,作用域僅限于函數內部(首字母是大寫的也不行)
全局變量: 在函數外部定義的變量,作用域在整個包都有效。
但是當變量在代碼塊中定義時,比如 if
for
中,那么這個變量的作用域就在該代碼塊中有效。
還有一個就是:賦值語句是不能定義在函數體外的,如:這種 name := "zhangsan"
,我們換成 var name string = "zhangsan"
即可。
3.Golang 執(zhí)行流程的兩種方式
先編譯,在執(zhí)行: go build -o Hello.exe test.go
(編譯完后可以到處運行,但是編譯后文件會較大)
直接運行: go run test.go
(直接運行,速度相對來說要比先編譯的較慢,需要依賴 Go 環(huán)境)
PS:Go 語言 定義的變量 或者 import
包,如果沒有使用放到,代碼是不能編譯通過的。
二、Golang 的基本操作
1.在 Linux 上安裝 Golang 語言開發(fā)包
1)安裝 Golang 軟件包
[root@localhost ~]# wget https://golang.google.cn/dl/go1.17.3.linux-amd64.tar.gz [root@localhost ~]# tar xf go1.17.3.linux-amd64.tar.gz -C /usr/local/ [root@localhost ~]# ln -s /usr/local/go/bin/* /usr/bin/ [root@localhost ~]# go version go version go1.17.3 linux/amd64
2)配置 Golang 的開發(fā)環(huán)境
[root@localhost ~]# mkdir -p ~/Go-Test/src # Golang 的源代碼目錄 [root@localhost ~]# mkdir -p ~/Go-Test/pkg # Golang 編譯后生成的庫文件 [root@localhost ~]# mkdir -p ~/Go-Test/bin # Golang 編譯后生成的可執(zhí)行文件
[root@localhost ~]# cat <> ~/.bashrc export GOROOT=/usr/local/go export GOPATH=~/Go-Test export PATH=$PATH:$GOROOT/bin:$GOPATH/bin END [root@localhost ~]# source ~/.bashrc [root@localhost ~]# go env # 查看 Go 的環(huán)境變量是否修改文件中目錄
3)編寫 Go 代碼進行驗證
[root@localhost ~]# cat <Hello.go package main import "fmt" func main() { fmt.Println("Hello World") } END [root@localhost ~]# go run Hello.go Hello World
2.Golang 變量的基本使用
package main import "fmt" func main() { var Count int // 定義一個變量 (聲明變量) Count = 188 // 給定義的變量進行賦值 fmt.Println("Count:",Count) }
Golang 變量的三種使用方式:
1)指定變量類型(聲明后若不賦值,則使用默認值)
func main() { var Count int // int 類型的默認值為 0 fmt.Println(Count) }
2)根據自行判定變量類型(類型推導: 簡單來說就是讓 Go 編譯器進行自主判斷)
func main() { var Count = 18.88 fmt.Printf("Count 的值=%v,Count 的類型=%T",Count,Count) }
3)直接使用 :=
進行賦值(:=
表示聲明并賦值)
func main() { name := "zhangsan" fmt.Println(name) }
在區(qū)域中的 數據值 可以在 同一類型范圍內不斷變化:
func main() { // 當定義多個相同名稱的變量時. Go 便會獲取最后一個變量的變量值 // 需要注意的是只能是同類型的 (比如說 int 類型就不能替換成 string) var sum = 188 // PS: 在同一區(qū)域中的變量名不能重復聲明. 也就是說在同一區(qū)域中的同一個變量名只能聲明一次 sum = 288 fmt.Println(sum) }
Golang 中 + 的使用:
func main() { var Sum = 188 var Sub = 18 Result := Sum + Sub fmt.Println(Result) // 當變量為整數時. 做的便是加法運算 1 := "Hello" 2 := "World" 3 := 1 + 2 fmt.Println(3) // 當變量為字符串時. 做的便是拼接操作 }
3.Golang 中整數的類型
類型 | 有無符號 | 占用存儲空間 | 備注 |
---|---|---|---|
int | 有 | 32 位系統(tǒng) 4 個字節(jié),64 位系統(tǒng) 8 個字節(jié) | ? |
uint | 無 | 32 位系統(tǒng) 4 個字節(jié),64 位系統(tǒng) 8 個字節(jié) | ? |
rune | 有 | 與 int32 等價 | 主要用于處理 Unicode 碼 |
byte | 無 | 與 uint8 等價 | 主要用于存儲字符 |
- 有符號合無符號最大的區(qū)別就是,有符號支持負數,而無符號則是只支持正數。
-
bit
?和?byte
?的區(qū)別:bit
?是計算機中最小的存儲單位,而?byte
?則是計算機中的基本存儲單元(1 btye = 8 bit
)
Go 語言的字符使用的是 UTF-8 的字符編碼,查詢編碼地址為:查詢編碼地址
在 Go 中,字符的本質是一個整數,直接輸出時,會打印出字符對應的 UTF-8 編碼的碼值。
func main() { var str string = "張三" fmt.Println("str 對應的 Unicode 碼為:",[]byte(str)) // 需要使用 []byte 來進行轉換 }
4.Golang 基本數據類型的默認值
數據類型 | 默認值 |
---|---|
整形 | 0 |
浮點型 | 0 |
字符串 | " " |
布爾類型 | false |
常見的值類型和引用類型:
值類型: 基本數據類型(int
float
bool
string
),數組和結構體(struct
)
引用類型: 指針、slice
切片、map
、channel
管道、interface
接口等等都是引用類型。
值類型和引用類型的使用特點:
值類型: 變量直接存儲值,內存通常在棧中分配。
引用類型: 變量存儲的是一個地址,這個地址對應的空間才是真正存儲的數據(值),內存通常在堆上分配。
當沒有任何變量引用這個地址時,這個地址對應的數據空間就成為了一個 垃圾,由 GC 來進行回收。
5.基本數據類型轉換為 String 類型
第一種方式:
package main import "fmt" func main() { var A int = 88 var B float64 = 188.88 var C bool = true var D byte = 'Z' // byte 只能定義單個字符 var str string // 定義一個空的字符串 // Sprintf 用于格式化輸出字符串 str = fmt.Sprintf("%d",A) fmt.Printf("str type is %T str=%q\n",str,str) str = fmt.Sprintf("%f",B) fmt.Printf("str type is %T str=%q\n",str,str) str = fmt.Sprintf("%t",C) fmt.Printf("str type is %T str=%q\n",str,str) str = fmt.Sprintf("%c",D) fmt.Printf("str type is %T str=%q\n",str,str) }
第二種方式:
package main import ( "fmt" // strconv 包用于實現基本數據類型和其字符串表示的相互轉換 "strconv" ) func main() { var A int = 88 var B float64 = 188.88 var C bool = true var str string str = strconv.FormatInt(int64(A),10) fmt.Printf("str type is %T str=%q\n",str,str) str = strconv.FormatFloat(B,'f',2,64) // 'f' 表示格式. 2 表示小數位保留兩位. 64 表示這個小數點是 float64 fmt.Printf("str type is %T str=%q\n",str,str) str = strconv.FormatBool(C) fmt.Printf("str type is %T str=%q\n",str,str) }
原文鏈接:https://blog.csdn.net/weixin_46902396/article/details/121405144
相關推薦
- 2022-04-16 C語言實現順序循環(huán)隊列實例_C 語言
- 2023-06-04 pandas.DataFrame?Series排序的使用(sort_values,sort_inde
- 2022-04-24 python使用技巧-查找文件?_python
- 2022-10-30 在C#程序中注入惡意DLL的方法詳解_C#教程
- 2023-01-26 C#實現Word轉換TXT的方法詳解_C#教程
- 2022-09-04 c++?求數組最大最小值函數的實現_C 語言
- 2022-02-17 H5移動端點擊出現背景藍色框的解決方案
- 2022-07-08 python?csv實時一條一條插入且表頭不重復問題_python
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細win安裝深度學習環(huán)境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發(fā)現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支