今天小編給大家分享一下go語言如何進(jìn)行強(qiáng)制類型轉(zhuǎn)換的相關(guān)知識(shí)點(diǎn),內(nèi)容詳細(xì),邏輯清晰,相信大部分人都還太了解這方面的知識(shí),所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。
成都創(chuàng)新互聯(lián)是工信部頒發(fā)資質(zhì)IDC服務(wù)器商,為用戶提供優(yōu)質(zhì)的西部信息服務(wù)器托管服務(wù)
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)是一個(gè)使用在接口值上的操作,用于檢查接口類型變量所持有的值是否實(shí)現(xiàn)了期望的接口或者具體的類型。
語法格式如下:
value, ok := x.(T)
其中,x 表示一個(gè)接口的類型,T 表示一個(gè)具體的類型(也可為接口類型)。
示例:
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
因?yàn)?nbsp;golang 自動(dòng)推斷 a 是 int 類型。
(這個(gè)更像是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)建一個(gè)新類型對(duì)象。在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)
}
這樣的代碼是錯(cuò)誤的,編譯器會(huì)提示cannot convert p (type *int) to type *int64
指針的強(qiáng)制類型轉(zhuǎn)換需要用到unsafe包中的函數(shù)實(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)容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會(huì)為大家更新不同的知識(shí),如果還想學(xué)習(xí)更多的知識(shí),請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。