溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

go語言如何進(jìn)行強(qiáng)制類型轉(zhuǎn)換

發(fā)布時間:2023-01-09 10:35:02 來源:億速云 閱讀:362 作者:iii 欄目:編程語言

今天小編給大家分享一下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強(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è)資訊頻道。

向AI問一下細(xì)節(jié)

免責(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)容。

AI