欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Go語(yǔ)言特點(diǎn)及基本數(shù)據(jù)類型使用詳解

 更新時(shí)間:2022年03月21日 16:08:57   作者:愿許浪盡天涯  
這篇文章主要為大家介紹了Go語(yǔ)言特點(diǎn)及基本數(shù)據(jù)類型使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

一、Golang 簡(jiǎn)介

Golang(又稱為 Go)是 Google 公司開發(fā)出的一種靜態(tài)強(qiáng)類型、編譯型、并發(fā)型,并具有垃圾回收功能的編程語(yǔ)言。

在這里插入圖片描述

1.Go 語(yǔ)言的特點(diǎn)

Go 語(yǔ)言保證了既能夠達(dá)到 靜態(tài)編譯語(yǔ)言的安全和性能,又達(dá)到了 動(dòng)態(tài)開發(fā)語(yǔ)言維護(hù)的高效率,使用一個(gè)表達(dá)式來(lái)形容 Go 語(yǔ)言:Go = C + Python,說(shuō)明 Go 語(yǔ)言既有 C 靜態(tài)語(yǔ)言程序的運(yùn)行速度,又能達(dá)到 Python 動(dòng)態(tài)語(yǔ)言的快速開發(fā)。

1)從 C 語(yǔ)言中繼承了很多理念,包括表達(dá)式語(yǔ)法,控制結(jié)構(gòu),基礎(chǔ)數(shù)據(jù)類型,調(diào)用參數(shù)傳值,指針 等等,也保留了和 C 語(yǔ)言一樣的編譯執(zhí)行方式及弱化的指針。

func testPtr(num *int) {
    *num = 20
}

2)引入 包的概念,用于組織程序結(jié)構(gòu),Go 語(yǔ)言的 一個(gè)文件都要?dú)w于一個(gè)包,而不能單獨(dú)存在。

package main
import "fmt"
func main() {
    fmt.Println("Hello World")
}

3)垃圾回收機(jī)制,內(nèi)存自動(dòng)回收,不需要開發(fā)人員管理。

4)天然并發(fā):從語(yǔ)言層面上支持并發(fā),實(shí)現(xiàn)簡(jiǎn)單;goroutine 輕量級(jí)線程,可實(shí)現(xiàn)大并發(fā)處理,高效利用多核;基于 CPS 并發(fā)模型實(shí)現(xiàn)。

5)吸收了 管道通信機(jī)制,形成 Go 語(yǔ)言特有的管道 Channel,通過(guò)管道 Channel,我們可以實(shí)現(xiàn)不同 goroute 間的互相通信。

6)函數(shù)可以返回多個(gè)值:

func getSumAndSub(sum int,sub int) (int,int) {
    Sum := sum + sub
    Sub := sum - sub
    return Sum,Sub
}

7)新的創(chuàng)新,比如:Slice 切片,Defer 延時(shí)執(zhí)行等。

2.Golang 的變量作用域

局部變量: 在函數(shù)內(nèi)部定義的變量,作用域僅限于函數(shù)內(nèi)部(首字母是大寫的也不行)

全局變量: 在函數(shù)外部定義的變量,作用域在整個(gè)包都有效。

但是當(dāng)變量在代碼塊中定義時(shí),比如 if for 中,那么這個(gè)變量的作用域就在該代碼塊中有效。

還有一個(gè)就是:賦值語(yǔ)句是不能定義在函數(shù)體外的,如:這種 name := "zhangsan",我們換成 var name string = "zhangsan" 即可。

3.Golang 執(zhí)行流程的兩種方式

先編譯,在執(zhí)行: go build -o Hello.exe test.go(編譯完后可以到處運(yùn)行,但是編譯后文件會(huì)較大)

直接運(yùn)行: go run test.go(直接運(yùn)行,速度相對(duì)來(lái)說(shuō)要比先編譯的較慢,需要依賴 Go 環(huán)境)

PS:Go 語(yǔ)言 定義的變量 或者 import 包,如果沒(méi)有使用放到,代碼是不能編譯通過(guò)的。

二、Golang 的基本操作

1.在 Linux 上安裝 Golang 語(yǔ)言開發(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 編譯后生成的庫(kù)文件
[root@localhost ~]# mkdir -p ~/Go-Test/bin						# Golang 編譯后生成的可執(zhí)行文件
[root@localhost ~]# cat <<END >> ~/.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 代碼進(jìn)行驗(yàn)證

[root@localhost ~]# cat <<END > 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						// 定義一個(gè)變量 (聲明變量)
    Count = 188 						// 給定義的變量進(jìn)行賦值
    fmt.Println("Count:",Count)
}

Golang 變量的三種使用方式:

1)指定變量類型(聲明后若不賦值,則使用默認(rèn)值)

func main() {
    var Count int						// int 類型的默認(rèn)值為 0
    fmt.Println(Count)
}

2)根據(jù)自行判定變量類型(類型推導(dǎo): 簡(jiǎn)單來(lái)說(shuō)就是讓 Go 編譯器進(jìn)行自主判斷)

func main() {
    var Count = 18.88
    fmt.Printf("Count 的值=%v,Count 的類型=%T",Count,Count)
}

3)直接使用 := 進(jìn)行賦值(:= 表示聲明并賦值)

func main() {
    name := "zhangsan"
    fmt.Println(name)
}

在區(qū)域中的 數(shù)據(jù)值 可以在 同一類型范圍內(nèi)不斷變化:

func main() {
    // 當(dāng)定義多個(gè)相同名稱的變量時(shí). Go 便會(huì)獲取最后一個(gè)變量的變量值
    // 需要注意的是只能是同類型的 (比如說(shuō) int 類型就不能替換成 string)
    var sum = 188
    // PS: 在同一區(qū)域中的變量名不能重復(fù)聲明. 也就是說(shuō)在同一區(qū)域中的同一個(gè)變量名只能聲明一次
    sum = 288
    fmt.Println(sum)
}

Golang 中 + 的使用:

func main() {
    var Sum = 188
    var Sub = 18
    Result := Sum + Sub
    fmt.Println(Result)					// 當(dāng)變量為整數(shù)時(shí). 做的便是加法運(yùn)算
    1 := "Hello"
    2 := "World"
    3 := 1 + 2
    fmt.Println(3)						// 當(dāng)變量為字符串時(shí). 做的便是拼接操作
}

3.Golang 中整數(shù)的類型

類型有無(wú)符號(hào)占用存儲(chǔ)空間備注
int32 位系統(tǒng) 4 個(gè)字節(jié),64 位系統(tǒng) 8 個(gè)字節(jié) 
uint無(wú)32 位系統(tǒng) 4 個(gè)字節(jié),64 位系統(tǒng) 8 個(gè)字節(jié) 
rune與 int32 等價(jià)主要用于處理 Unicode 碼
byte無(wú)與 uint8 等價(jià)主要用于存儲(chǔ)字符
  • 有符號(hào)合無(wú)符號(hào)最大的區(qū)別就是,有符號(hào)支持負(fù)數(shù),而無(wú)符號(hào)則是只支持正數(shù)。
  • bit 和 byte 的區(qū)別:bit 是計(jì)算機(jī)中最小的存儲(chǔ)單位,而 byte 則是計(jì)算機(jī)中的基本存儲(chǔ)單元(1 btye = 8 bit

Go 語(yǔ)言的字符使用的是 UTF-8 的字符編碼,查詢編碼地址為:查詢編碼地址

在 Go 中,字符的本質(zhì)是一個(gè)整數(shù),直接輸出時(shí),會(huì)打印出字符對(duì)應(yīng)的 UTF-8 編碼的碼值。

func main() {
    var str string = "張三"
    fmt.Println("str 對(duì)應(yīng)的 Unicode 碼為:",[]byte(str))			// 需要使用 []byte 來(lái)進(jìn)行轉(zhuǎn)換
}

4.Golang 基本數(shù)據(jù)類型的默認(rèn)值

數(shù)據(jù)類型默認(rèn)值
整形0
浮點(diǎn)型0
字符串" "
布爾類型false

常見的值類型和引用類型:

值類型: 基本數(shù)據(jù)類型(int float bool string),數(shù)組和結(jié)構(gòu)體(struct

引用類型: 指針、slice 切片、map、channel 管道、interface 接口等等都是引用類型。

值類型和引用類型的使用特點(diǎn):

值類型: 變量直接存儲(chǔ)值,內(nèi)存通常在棧中分配。

引用類型: 變量存儲(chǔ)的是一個(gè)地址,這個(gè)地址對(duì)應(yīng)的空間才是真正存儲(chǔ)的數(shù)據(jù)(值),內(nèi)存通常在堆上分配。

當(dāng)沒(méi)有任何變量引用這個(gè)地址時(shí),這個(gè)地址對(duì)應(yīng)的數(shù)據(jù)空間就成為了一個(gè) 垃圾,由 GC 來(lái)進(jìn)行回收。

5.基本數(shù)據(jù)類型轉(zhuǎn)換為 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 只能定義單個(gè)字符
    var str string							// 定義一個(gè)空的字符串
    // 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 包用于實(shí)現(xiàn)基本數(shù)據(jù)類型和其字符串表示的相互轉(zhuǎn)換
    "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 表示小數(shù)位保留兩位. 64 表示這個(gè)小數(shù)點(diǎn)是 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)
}

以上就是Go語(yǔ)言特點(diǎn)及基本數(shù)據(jù)類型使用詳解的詳細(xì)內(nèi)容,更多關(guān)于Go語(yǔ)言特點(diǎn)及基本數(shù)據(jù)類型的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 深入解析Go?變量字符串與字符編碼問(wèn)題

    深入解析Go?變量字符串與字符編碼問(wèn)題

    Go的字符串是由單個(gè)字節(jié)連接起來(lái)的,Go語(yǔ)言的字符串的字節(jié)使用UTF-8編碼標(biāo)識(shí)Unicode文本,接下來(lái)通過(guò)本文給大家介紹下Go變量字符串與字符編碼問(wèn)題,需要的朋友可以參考下
    2022-04-04
  • Golang?errgroup?設(shè)計(jì)及實(shí)現(xiàn)原理解析

    Golang?errgroup?設(shè)計(jì)及實(shí)現(xiàn)原理解析

    這篇文章主要為大家介紹了Golang?errgroup?設(shè)計(jì)及實(shí)現(xiàn)原理解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • 一文帶你熟悉Go語(yǔ)言中的for循環(huán)

    一文帶你熟悉Go語(yǔ)言中的for循環(huán)

    這篇文章主要和大家分享一下Go語(yǔ)言中for循環(huán)的定義與使用,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Go語(yǔ)言有一定的幫助,需要的可以參考一下
    2022-11-11
  • 淺析Golang中的內(nèi)存逃逸

    淺析Golang中的內(nèi)存逃逸

    內(nèi)存逃逸分析是go的編譯器在編譯期間,根據(jù)變量的類型和作用域,確定變量是堆上還是棧上。本文將通過(guò)示例淺析一下Golang中的內(nèi)存逃逸,需要的可以了解一下
    2022-10-10
  • 在Go語(yǔ)言項(xiàng)目中使用Zap日志庫(kù)的操作過(guò)程

    在Go語(yǔ)言項(xiàng)目中使用Zap日志庫(kù)的操作過(guò)程

    本文將先介紹Go語(yǔ)言原生的日志庫(kù)的使用,然后詳細(xì)介紹非常流行的Uber開源的zap日志庫(kù),同時(shí)會(huì)介紹如何搭配·Lumberjack·實(shí)現(xiàn)日志的切割和歸檔,對(duì)Go使用Zap日志庫(kù)相關(guān)知識(shí)感興趣的朋友一起看看吧
    2024-03-03
  • Golang?中實(shí)現(xiàn)?Set的思路詳解

    Golang?中實(shí)現(xiàn)?Set的思路詳解

    本文介紹了Go中兩種set的實(shí)現(xiàn)原理,并在此基礎(chǔ)介紹了對(duì)應(yīng)于它們的兩個(gè)包簡(jiǎn)單使用,本文介紹的非常詳細(xì),需要的朋友參考下吧
    2024-01-01
  • Golang之sync.Pool使用詳解

    Golang之sync.Pool使用詳解

    這篇文章主要介紹了Golang之sync.Pool使用詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-05-05
  • Go中RPC遠(yuǎn)程過(guò)程調(diào)用的實(shí)現(xiàn)

    Go中RPC遠(yuǎn)程過(guò)程調(diào)用的實(shí)現(xiàn)

    本文主要介紹了Go中RPC遠(yuǎn)程過(guò)程調(diào)用的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • Golang實(shí)現(xiàn)支付寶沙箱支付的方法步驟

    Golang實(shí)現(xiàn)支付寶沙箱支付的方法步驟

    本文主要介紹了Golang實(shí)現(xiàn)支付寶沙箱支付的方法步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • golang context接口類型方法介紹

    golang context接口類型方法介紹

    這篇文章主要為大家介紹了golang context接口類型方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-09-09

最新評(píng)論