日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【Go语言】【4】GO语言类型和为类型增加方法

發(fā)布時(shí)間:2025/4/16 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Go语言】【4】GO语言类型和为类型增加方法 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一、GO語言的類型

GO語言中內(nèi)置了如下基礎(chǔ)類型:

整型:byte(int8)、int16、int、uint等

浮點(diǎn)型:float32、float64

復(fù)數(shù)類型:complex64、complex128

布爾類型:bool

字符類型:rune

字符串:string

錯(cuò)誤類型:error

同時(shí)GO語言也支持下面的復(fù)合類型:

指針

數(shù)組

切片:slice

集合:map

通道:chan

結(jié)構(gòu)體:struct

接口:interface


上看下看左看右看,怎么沒有看到double類型呢?同時(shí)還有幾個(gè)陌生的面孔,像rune、error、slice、chan等,呵呵,GO的確沒有提供double類型,它認(rèn)為浮點(diǎn)類型足夠表達(dá)double的范圍,所以就把double取消了;

另外,整型也進(jìn)行了劃分,像int8、int16、int、uint、uintptr等,其中int8與byte是等價(jià)的,可以認(rèn)為byte是int8的別名,對(duì)了,給類型取別名可是GO的特別本事喲~~~


1、按Java習(xí)慣先創(chuàng)建workspace目錄,我把這個(gè)workspace放到了GOROOT環(huán)境變量下,里面分別再創(chuàng)建src、bin、pkg三個(gè)目錄

2、打開Sublime text,選擇“File > Open Folder...”

3、在彈出的窗口中選擇workspace目錄

4、在Sublime text中輸入如下代碼

package main


import "fmt"


type intNick int //為int取個(gè)intNick別名


func main() {

? ? ?var a intNick

? ? ?fmt.Println(a)

}

5、選擇“File > Save with Encoding > UTF-8”,文件名取為“nick.go”

6、type intNick int表示為int取了一個(gè)別名,叫intNick

? var a intNick表示定義一個(gè)變量a,它的類型是intNick,缺省值為0

? fmt.Println(a)表示輸出變量a的值

7、按ctrl + b,輸入go run nick.go后回車,可以看到運(yùn)行結(jié)果:輸出0,耗時(shí)1.0231298秒


二、為類型增加方法?

在上面的例子其實(shí)不僅僅是取一個(gè)別名,而是重新定義了一個(gè)類型,我們可以為這個(gè)全新的類型增加方法

1、在nick.go中增加如下代碼

/**

?* 為intNick類型增加一個(gè)isLessThanParam的方法

?*/

func (nick intNick) isLessThanParam(param intNick) bool {

return nick < param

}

2、GO語言的方法定義

func methodname(param1 paramType1, param2 paramType2) (result1 resultType1, result2 resultType2){

? ? //...略

}

其中func是方法修飾符

methodname是方法名

param1param2是方法入?yún)?/span>

paramType1paramType2是方法入?yún)⒌膮?shù)

result1result2是返回值

resultType1resultType2是返回值的類型


【備注】:

GO語言比較有意思的是,它可以返回多個(gè)值,這點(diǎn)是程序員一直夢(mèng)寐以求的,但其它語言所不支持的


在《[3]GO語言常量與變量》中曾經(jīng)說過:GO語言很符合人的正常思維,代碼想怎么寫就怎么寫,無論怎么寫都符合GO的語法。

2.1 假如param1和param2的類型一樣,都是paramType,那么很自然地可以把方法簡寫為

func methodname(param1,param2 paramType) (result1 resultType1, result2 resultType2){

? ? //...略

}

2.2 假如result1和result2的類型一樣,都是resultType,那么方法還可以簡寫為

func methodname(param1, param2 paramType) (result1, result2 resultType){

? ? //...略

}

2.3 假如參數(shù)和返回值只有一個(gè),那么方法可以簡寫為

func methodname(param paramType) (result resultType){

? ? //...略

}

2.4 既然只有一個(gè)返回值,直接返回一個(gè)返回值的類型就得了,那么方法可以簡寫為

func methodname(param paramType) resultType{

? ? //...略

}

以上表達(dá)方式都是正確的,所以GO語言是簡約而不簡單

3、為類型增加的方法與一般方法的區(qū)別

在2中介紹了GO語言是怎么定義方法的,那么我們?yōu)槎x的全新類型增加的方法與一般方法的區(qū)別在什么地方呢?

  • 為類型增加方法:

func (nick intNick) isLessThanParam(param intNick) boolean {

? ?return nick < param

}

  • 一般方法:

func methodname(param paramType) resultType{

? ?//...略

}

明眼人一下就看出來了——在方法名前增加了(nick intNick),這表示該方法是用于nick對(duì)象的nick對(duì)象的類型為intNick

所以在main中使用該方法時(shí)就可以參照面向?qū)ο蟮姆绞竭M(jìn)行編碼了:

// 定義對(duì)象a,對(duì)象是intNick類型的對(duì)象。這就像有一個(gè)Integer類,它的實(shí)例是a

var a intNick = 8

// 調(diào)用對(duì)象a的isLessThanParam()方法

a.isLessThanParam(9)


4、GO到底是面向過程的,還是面向?qū)ο蟮?#xff0c;還是面向函數(shù)的?

這是一個(gè)很好的話題,在我看來它都有,在51cto的視頻教學(xué)中,無聞老師提及到了GO是面向類型的編程,很精辟的一個(gè)歸納。

5、修改main方法

func main() {

? ? var a intNick = 8

? ? fmt.Println(a.isLessThanParam(9))

}

6、按ctrl + b,輸入go run nick.go后回車,可以看到運(yùn)行結(jié)果:輸出true


三、題外話

1、盡管byte是int8的別名,但在常規(guī)的開發(fā)過程中,還是建議不要用int8指定變量的類型,這樣容易導(dǎo)致移植困難

2、GO語言對(duì)代碼的排列方式也進(jìn)行了語法級(jí)別的檢查,動(dòng)手編寫上面的代碼會(huì)發(fā)現(xiàn),函數(shù)定義時(shí)花括號(hào)必須在這一行的后面,如果把花括號(hào)新起一行,則會(huì)出現(xiàn)unexpected semicolon or newline before {錯(cuò)誤,如下:

func (nick intNick) isLessThanParam(param intNick) bool?

{

? ? return nick < param

}



總結(jié)

以上是生活随笔為你收集整理的【Go语言】【4】GO语言类型和为类型增加方法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。