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

Golang Type關(guān)鍵字的使用

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

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

Type 自定義類型

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

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

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

type IZ int

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

var a IZ = 5

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

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

type (
   IZ int
   FZ float64
   STR string
)

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

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

valueOfTypeB = typeB(valueOfTypeA)

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

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

package main

import (
    "fmt"
)

type A struct {
    Face int
}
type Aa A // 自定義新類型Aa,沒有基礎(chǔ)類型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()
}

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

通過Type 關(guān)鍵字在原有類型基礎(chǔ)上構(gòu)造出一個(gè)新類型,我們需要針對(duì)新類型來重新創(chuàng)建新方法。

類型系統(tǒng)

很少有編程類的書談及類型系統(tǒng)(type system)這個(gè)話題,實(shí)際上類型系統(tǒng)才是一門編程語言的地基,它的地位至關(guān)重要。因此,這里我們將從類型系統(tǒng)入手介紹Go語言的面向?qū)ο缶幊烫匦浴?/p>

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

內(nèi)容:

  • 基礎(chǔ)類型,如byte、int、bool、float等
  • 復(fù)合類型,如數(shù)組、結(jié)構(gòu)體、指針等
  • 可以指向任意對(duì)象的類型(Any類型)
  • 值語義和引用語義
  • 面向?qū)ο?,即所有具備面向?qū)ο筇卣鳎ū热绯蓡T方法)的類型
  • 接口

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

為類型添加方法

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

例如:

type Integer int

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

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

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

func main() { 
 var a Integer = 1 

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

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

舉個(gè)例子:

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

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

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

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

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

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

那么運(yùn)行程序得到的結(jié)果是 a=1 ,也就是維持原來的值。讀者可以親自動(dòng)手嘗試一下。

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

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

相關(guān)文章

  • 使用golang實(shí)現(xiàn)在屏幕上打印進(jìn)度條的操作

    使用golang實(shí)現(xiàn)在屏幕上打印進(jìn)度條的操作

    這篇文章主要介紹了使用golang實(shí)現(xiàn)在屏幕上打印進(jìn)度條的操作,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-03-03
  • 一文帶大家了解Go語言中的內(nèi)聯(lián)優(yōu)化

    一文帶大家了解Go語言中的內(nèi)聯(lián)優(yōu)化

    內(nèi)聯(lián)優(yōu)化是一種常見的編譯器優(yōu)化策略,通俗來講,就是把函數(shù)在它被調(diào)用的地方展開,這樣可以減少函數(shù)調(diào)用所帶來的開銷,本文主要為大家介紹了Go中內(nèi)聯(lián)優(yōu)化的具體使用,需要的可以參考下
    2023-05-05
  • GoLang并發(fā)機(jī)制探究goroutine原理詳細(xì)講解

    GoLang并發(fā)機(jī)制探究goroutine原理詳細(xì)講解

    goroutine是Go語言提供的語言級(jí)別的輕量級(jí)線程,在我們需要使用并發(fā)時(shí),我們只需要通過 go 關(guān)鍵字來開啟 goroutine 即可。這篇文章主要介紹了GoLang并發(fā)機(jī)制goroutine原理,感興趣的可以了解一下
    2022-12-12
  • go語言LeetCode題解944刪列造序示例詳解

    go語言LeetCode題解944刪列造序示例詳解

    這篇文章主要為大家介紹了go語言LeetCode題解944刪列造序示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12
  • Go語言中validation庫(kù)不能校驗(yàn)零值問題的解決方法

    Go語言中validation庫(kù)不能校驗(yàn)零值問題的解決方法

    在使用 Gin 框架的時(shí)候,前后端傳遞數(shù)據(jù)的時(shí)候,比如使用 JSON 格式,通常會(huì)使用 ShouldBindJSON 去用結(jié)構(gòu)體打 tag 綁定前端傳來的 JSON 格式數(shù)據(jù),本文給大家介紹了Go語言中validation庫(kù)不能校驗(yàn)零值問題的解決方法,需要的朋友可以參考下
    2024-08-08
  • Go基礎(chǔ)教程系列之import導(dǎo)入包(遠(yuǎn)程包)和變量初始化詳解

    Go基礎(chǔ)教程系列之import導(dǎo)入包(遠(yuǎn)程包)和變量初始化詳解

    這篇文章主要介紹了Go基礎(chǔ)教程系列之import導(dǎo)包和初始化詳解,需要的朋友可以參考下
    2022-04-04
  • golang語法使用的注意事項(xiàng)

    golang語法使用的注意事項(xiàng)

    這篇文章主要給大家介紹了關(guān)于golang語法使用的一些注意事項(xiàng),Golang是一種靜態(tài)類型的編程語言,它支持基本的數(shù)據(jù)類型,包括整型、浮點(diǎn)型、布爾型、字符串型,需要的朋友可以參考下
    2023-07-07
  • golang組件swagger生成接口文檔實(shí)踐示例

    golang組件swagger生成接口文檔實(shí)踐示例

    這篇文章主要為大家介紹了golang組件swagger生成接口文檔實(shí)踐示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪
    2022-04-04
  • Golang二進(jìn)制文件混淆保護(hù)操作

    Golang二進(jìn)制文件混淆保護(hù)操作

    這篇文章主要介紹了Golang二進(jìn)制文件混淆保護(hù)操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • golang的httpserver優(yōu)雅重啟方法詳解

    golang的httpserver優(yōu)雅重啟方法詳解

    這篇文章主要給大家介紹了關(guān)于golang的httpserver優(yōu)雅重啟的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2018-03-03

最新評(píng)論