1. 程式人生 > 其它 >Golang的型別轉換-三種轉型(強轉、斷言、“向上造型“)

Golang的型別轉換-三種轉型(強轉、斷言、“向上造型“)

技術標籤:golanggo介面

golang沒有類似於java中的隱式型別轉換
golang中的型別轉換分為強制型別轉換、型別斷言、以及“向上造型”
向上造型這個詞是取的Java中的定義,沒有複雜的含義,表示將子類轉為父類。在golang中達到同樣的目的只需要.父結構體即可

package main

import "fmt"

// 隱式型別轉換和強轉
func t1(){
	var a float32 = 5.6
	var b int = 10
	//fmt.Println (a * b) // -- 隱式型別轉換,編譯報錯,不支援
	fmt.Println(a * float32
(b)) // -- 強轉 } type Base interface { hello() } type P interface { hi() } type S1 struct { } func (s1 *S1) hi() { fmt.Println("s1-hi") } func (s1 *S1) hello() { fmt.Println("s1-hello") } type S2 struct { } func (s2 S2) hi() { fmt.Println("s2-hi") } type Son struct
{ S1 } func (son *Son) hi() { fmt.Println("son-hi") } // 型別斷言。注意由指標和非指標實現的方法,斷言時的寫法不同 // TODO .(T) 用來型別斷言,返回引數1為斷言之後的型別值,如果失敗則是nil,引數2為是否斷言成功 // 如果型別本身就是斷言的型別,則斷言成功,會轉換成這個型別並返回 // 可以斷言的情況: // 1.由介面斷言到結構體 // 2.由父介面斷言到子介面 func t2() { // 1.由介面斷言到結構體 var p1 P = &S1{} // 指標實現的方法hi p1.(*S1).hi() var
p2 P = S2{} // 非指標實現的方法hi p2.(S2).hi() // 2.由父介面斷言到子介面 var base Base = &S1{} base.(P).hi() } // “向上造型”(java中這麼叫,即轉為父類) func t3() { son := Son{} son.hi() // 因為golang中繼承的語義是將父結構嵌入(即匿名欄位)到子結構,所以只需要呼叫嵌入的父結構體即可 son.S1.hi() } func main() { //t1() t2() t3() }