首頁 >後端開發 >Golang >go語言怎麼進行強制型別轉換

go語言怎麼進行強制型別轉換

青灯夜游
青灯夜游原創
2023-01-07 14:05:475901瀏覽

go語言中的強制型別轉換有三種語法形式:1、型別斷言,語法「value, ok := x.(需要轉換的型別)」;2、使用「type (a)」形式進行的型別轉換,語法「型別B的值= 類型B(型A的值)」;3、指標型別轉換,語法「(*指標型別)(unsafe.Pointer(值))」。

go語言怎麼進行強制型別轉換

本教學操作環境:windows7系統、GO 1.18版本、Dell G3電腦。

golang是強型別語言,有強制型別轉換,但有別於Java語言所使用的強制型別轉換。

golang強制型別轉換

golang語言中分為型別轉換(type conversion)型別斷言(type assertion)指標型別轉換

1、類型斷言

類型斷言(Type Assertion)是使用在介面值上的操作,用於檢查介面類型變數所持有的值是否實現了期望的介面或具體的類型。

語法格式如下:

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)
    }
}
打印结果是:int 10
因为 golang 自动推断 a 是 int 类型。
(这个更像是Java的强制类型转换,认为变量 a 是 int 类型,就强转为 int 类型来使用)

#2、型別轉換

package main

import "fmt"

func main() {
   var a float32 = 5.6
   var b int = 10
   fmt.Println (a * float32(b))
}

程式碼片段中的float32( b) 就是第二種強制型別轉換, 普通變數型別int,float,string 都可以使用type (a)這種形式來進行強制型別轉換,例如

var a int32  = 10
var b int64 = int64(a)
var c float32 = 12.3
var d float64 =float64(c)

這種型別轉換形式更像是Java的透過建構類別的建構方法建立一個新類型物件。在Java語法中不屬於強制型別轉換。

3、指標型別轉換

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
指標的強制型別轉換需要用到unsafe套件中的函式實作

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)
}

#總結

golang中的強制型別轉換有三種語法形式,分別是型別斷言型別轉換指標型別轉換,文法上型別斷言指標型別轉換和Java比較像。

golang和Java的強制型別轉換可以對比著理解,但是不同語言設計思想不同,不能硬類比。

【相關推薦:Go影片教學程式設計教學

以上是go語言怎麼進行強制型別轉換的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn