最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Golang Type關鍵字的使用

 更新時間:2023年11月09日 11:15:16   作者:富士康質檢員張全蛋  
Type關鍵字在Go語言中作用很重要,比如定義結構體,接口,還可以自定義類型,定義類型別名等,具有一定的參考價值,感興趣的可以了解一下

Type關鍵字在Go語言中作用很重要,比如定義結構體,接口,還可以自定義類型,定義類型別名等。自定義類型由一組值以及作用于這些值的方法組成,類型一般有類型名稱,往往從現(xiàn)有類型組合通過Type關鍵字構造出一個新的類型。

Type 自定義類型

在Go 語言中,基礎類型有下面幾種:

    bool byte complex64 complex128 error float32 float64
    int int8 int16 int32 int64 rune string
    uint uint8 uint16 uint32 uint64 uintptr

使用 type 關鍵字可以定義我們自己的類型,如我們可以使用type定義一個新的結構體,但也可以把一個已經(jīng)存在的類型作為基礎類型而定義新類型,然后就可以在我們的代碼中使用新的類型名字,這稱為自定義類型,如:

type IZ int

這里IZ就是完全是一種新類型,然后我們可以使用下面的方式聲明變量:

var a IZ = 5

這里我們可以看到 int 是變量 a 的底層類型,這也使得它們之間存在相互轉換的可能。

如果我們有多個類型需要定義,可以使用因式分解關鍵字的方式,例如:

type (
   IZ int
   FZ float64
   STR string
)

在 type IZ int 中,IZ 就是在 int 類型基礎構建的新名稱,這稱為自定義類型。然后就可以使用 IZ 來操作 int 類型的數(shù)據(jù)。使用這種方法定義之后的類型可以擁有更多的特性,但是在類型轉換時必須顯式轉換。

每個值都必須在經(jīng)過編譯后屬于某個類型(編譯器必須能夠推斷出所有值的類型),因為 Go 語言是一種靜態(tài)類型語言。在必要以及可行的情況下,一個類型的值可以被轉換成另一種類型的值。由于 Go 語言不存在隱式類型轉換,因此所有的轉換都必須顯式說明,就像調用一個函數(shù)一樣(類型在這里的作用可以看作是一種函數(shù)):

valueOfTypeB = typeB(valueOfTypeA)

類型 B 的值 = 類型 B(類型 A 的值)

type TZ int 中,新類型不會擁有原基礎類型所附帶的方法,如下面代碼所示:

package main

import (
    "fmt"
)

type A struct {
    Face int
}
type Aa A // 自定義新類型Aa,沒有基礎類型A的方法

func (a A) f() {
    fmt.Println("hi ", a.Face)
}

func main() {
    var s A = A{ Face: 9 }
    s.f()

    var sa Aa = Aa{ Face: 9 }
    sa.f()
}

編譯錯誤信息:sa.f undefined (type Aa has no field or method f) 

通過Type 關鍵字在原有類型基礎上構造出一個新類型,我們需要針對新類型來重新創(chuàng)建新方法。

類型系統(tǒng)

很少有編程類的書談及類型系統(tǒng)(type system)這個話題,實際上類型系統(tǒng)才是一門編程語言的地基,它的地位至關重要。因此,這里我們將從類型系統(tǒng)入手介紹Go語言的面向對象編程特性。

顧名思義,類型系統(tǒng)是指一個語言的類型體系結構。一個典型的類型系統(tǒng)通常包含如下基本

內容:

  • 基礎類型,如byte、int、bool、float等
  • 復合類型,如數(shù)組、結構體、指針等
  • 可以指向任意對象的類型(Any類型)
  • 值語義和引用語義
  • 面向對象,即所有具備面向對象特征(比如成員方法)的類型
  • 接口

類型系統(tǒng)描述的是這些內容在一個語言中如何被關聯(lián)。

為類型添加方法

在Go語言中,你可以給任意類型(包括內置類型,但不包括指針類型)添加相應的方法,

例如:

type Integer int

func (a Integer) Less(b Integer) bool { 
  return a < b 
}

在這個例子中,我們定義了一個新類型 Integer ,它和 int 沒有本質不同,只是它為內置的

int 類型增加了個新方法 Less() 。 這樣實現(xiàn)了Integer 后,就可以讓整型像一個普通的類一樣使用:

func main() { 
 var a Integer = 1 

 if a.Less(2) { 
    fmt.Println(a, "Less 2") 
 } 
}

只有在你需要修改對象的時候,才必須用指針。它不是Go語言的約束,而是一種自然約束。

舉個例子:

func (a *Integer) Add(b Integer) { 
   *a += b 
}

這里為 Integer 類型增加了 Add() 方法。由于 Add() 方法需要修改對象的值,所以需要用指針引用。調用如下:

func main() { 
 var a Integer = 1 
 a.Add(2) 
 fmt.Println("a =", a) 
}

運行該程序,得到的結果是: a=3 。如果你實現(xiàn)成員方法時傳入的不是指針而是值(即傳入

Integer ,而非 *Integer ),如下所示:

func (a Integer) Add(b Integer) { 
  a += b 
}

那么運行程序得到的結果是 a=1 ,也就是維持原來的值。讀者可以親自動手嘗試一下。

究其原因,是因為 Go 語言和 C 語言一樣,類型都是基于值傳遞的。要想修改變量的值,只能傳遞指針。

到此這篇關于Golang Type關鍵字的使用的文章就介紹到這了,更多相關Golang Type關鍵字內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Golang實現(xiàn)反向代理的示例代碼

    Golang實現(xiàn)反向代理的示例代碼

    這篇文章主要為大家學習介紹了如何利用Golang實現(xiàn)反向代理,文中的示例代碼講解詳細,具有一定的學習價值,感興趣的小伙伴可以跟隨小編一起了解一下
    2023-07-07
  • go?zero微服務實戰(zhàn)系服務拆分

    go?zero微服務實戰(zhàn)系服務拆分

    這篇文章主要為大家介紹了go?zero微服務實戰(zhàn)系服務拆分的示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-06-06
  • Go?web中cookie值安全securecookie庫使用原理

    Go?web中cookie值安全securecookie庫使用原理

    這篇文章主要為大家介紹了Go?web中cookie值安全securecookie庫使用及實現(xiàn)原理詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-11-11
  • golang如何替換換行符

    golang如何替換換行符

    這篇文章主要介紹了golang如何替換換行符問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • Go語言實現(xiàn)UDP協(xié)議及TCP通訊

    Go語言實現(xiàn)UDP協(xié)議及TCP通訊

    這篇文章介紹了Go語言實現(xiàn)UDP協(xié)議及TCP通訊的方法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-07-07
  • Go語言結合grpc和protobuf實現(xiàn)去中心化的聊天室

    Go語言結合grpc和protobuf實現(xiàn)去中心化的聊天室

    這篇文章主要為大家詳細介紹了Go語言如何結合grpc和protobuf實現(xiàn)去中心化的聊天室,文中的示例代碼講解詳細,有需要的小伙伴可以跟隨小編一起學習一下
    2024-03-03
  • Golang設計模式中的橋接模式詳細講解

    Golang設計模式中的橋接模式詳細講解

    橋接模式是一種結構型設計模式,通過橋接模式可以將抽象部分和它的實現(xiàn)部分分離,本文主要介紹了GoLang橋接模式,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2023-01-01
  • Go 在 MongoDB 中常用查詢與修改的操作

    Go 在 MongoDB 中常用查詢與修改的操作

    這篇文章主要介紹了Go 在 MongoDB 中常用查詢與修改的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-05-05
  • golang redigo發(fā)布訂閱使用的方法

    golang redigo發(fā)布訂閱使用的方法

    本文主要介紹了golang redigo發(fā)布訂閱使用的方法,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • Go語言與gRPC的完美結合實戰(zhàn)演練

    Go語言與gRPC的完美結合實戰(zhàn)演練

    這篇文章主要介紹了Go語言與gRPC的完美結合實戰(zhàn)演練,gRPC(Remote?Procedure?Call)是一種遠程過程調用技術,通過壓縮和序列化數(shù)據(jù)來優(yōu)化網(wǎng)絡通信,可以顯著提高服務調用的性能和效率
    2024-01-01

最新評論

阜南县| 冀州市| 娄烦县| 富宁县| 石屏县| 阿克陶县| 筠连县| 庆安县| 南阳市| 商河县| 房产| 新竹市| 金寨县| 安康市| 万全县| 四川省| 巴青县| 华容县| 错那县| 桂林市| 玛沁县| 康平县| 涞水县| 秦皇岛市| 当雄县| 古蔺县| 东乌珠穆沁旗| 成武县| 崇礼县| 进贤县| 太仓市| 都兰县| 荆门市| 马关县| 水城县| 泸西县| 张家口市| 江北区| 兴山县| 沙坪坝区| 奎屯市|