您好,登錄后才能下訂單哦!
今天小編給大家分享一下go語言如何進(jìn)行強(qiáng)制類型轉(zhuǎn)換的相關(guān)知識點,內(nèi)容詳細(xì),邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。
go語言中的強(qiáng)制類型轉(zhuǎn)換有三種語法形式:1、類型斷言,語法“value, ok := x.(需要轉(zhuǎn)換的類型)”;2、使用“type (a)”形式進(jìn)行的類型轉(zhuǎn)換,語法“類型B的值 = 類型B(類型A的值)”;3、指針類型轉(zhuǎn)換,語法“(*指針類型)(unsafe.Pointer(值))”。
golang是強(qiáng)類型語言,有強(qiáng)制類型轉(zhuǎn)換,但是不同于Java語言所使用的強(qiáng)制類型轉(zhuǎn)換。
golang語言中分為類型轉(zhuǎn)換(type conversion)、類型斷言(type assertion)和指針類型轉(zhuǎn)換。
1、類型斷言
類型斷言(Type Assertion)是一個使用在接口值上的操作,用于檢查接口類型變量所持有的值是否實現(xiàn)了期望的接口或者具體的類型。
語法格式如下:
value, ok := x.(T)
其中,x 表示一個接口的類型,T 表示一個具體的類型(也可為接口類型)。
示例:
package main
import "fmt"
func main() {
var a interface{} =10
t,ok:= a.(int)
if ok{
fmt.Println("int",t)
}
t2,ok:= a.(float32)
if ok{
fmt.Println("float32",t2)
}
}
打印結(jié)果是:int 10
因為 golang 自動推斷 a 是 int 類型。
(這個更像是Java的強(qiáng)制類型轉(zhuǎn)換,認(rèn)為變量 a 是 int 類型,就強(qiáng)轉(zhuǎn)為 int 類型來使用)
2、類型轉(zhuǎn)換
package main
import "fmt"
func main() {
var a float32 = 5.6
var b int = 10
fmt.Println (a * float32(b))
}
代碼段中的 float32(b) 就是第二種強(qiáng)制類型轉(zhuǎn)換, 普通變量類型int,float,string 都可以使用 type (a)這種形式來進(jìn)行強(qiáng)制類型轉(zhuǎn)換,比如
var a int32 = 10
var b int64 = int64(a)
var c float32 = 12.3
var d float64 =float64(c)
這種類型轉(zhuǎn)換形式更像是Java的通過構(gòu)造類的構(gòu)造方法創(chuàng)建一個新類型對象。在Java語法中不屬于強(qiáng)制類型轉(zhuǎn)換。
3、指針類型轉(zhuǎn)換
package main
func main() {
var a int = 10
var p *int =&a
var c *int64
c= (*int64)(p)
}
這樣的代碼是錯誤的,編譯器會提示cannot convert p (type *int) to type *int64
指針的強(qiáng)制類型轉(zhuǎn)換需要用到unsafe包中的函數(shù)實現(xiàn)
package main
import "unsafe"
import "fmt"
func main() {
var a int =10
var b *int =&a
var c *int64 = (*int64)(unsafe.Pointer(b))
fmt.Println(*c)
}
以上就是“go語言如何進(jìn)行強(qiáng)制類型轉(zhuǎn)換”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學(xué)習(xí)更多的知識,請關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。