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

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

青灯夜游
發布: 2023-01-07 14:05:47
原創
5891 人瀏覽過

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中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新問題
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板