Go 兩種形式的「型別轉換」

2021-10-10 03:22:32 字數 1325 閱讀 3854

go 的型別轉換常常讓人有點迷,有兩種形式的"型別轉換":

**示例:

package main

import

"fmt"

type animal inte***ce

// cat 實現 animal 介面

type cat struct

func

(c *cat)

getname()

string

// dog 實現 animal 介面

type dog struct

func

(d *dog)

getname()

string

func

main()

animal :=

animal

(&cat)

// 結構體轉介面,括號裡需要傳遞乙個 *cat 型別而不能是 cat 型別,因為是 *cat 型別實現了 getname() 方法,而不是 cat 型別

fmt.

println

(animal.

getname()

) dog1 :=

dog(cat)

// 結構體之間進行轉換,括號裡需要傳遞乙個 cat 型別,因為 cat = dog, *cat = *dog

fmt.

println

(dog1.

getname()

) dog2 :=

(*dog)

(&cat)

fmt.

println

(dog2.

getname()

)// 如上所述,*cat = *dog

cat2, ok := animal.

(*cat)

// 型別斷言,左邊必須是乙個介面型別的物件,當介面物件的實際型別和要轉換的目標型別匹配時,轉換成功,否則失敗

if ok

else

dog3 , ok := animal.

(*dog)

// 型別斷言,介面物件的實際型別和要轉換的目標型別不匹配

if ok

else

}

執行結果:

i'm cat : hello kitty

i'm dog : hello kitty

i'm dog : hello kitty

convert animal to cat - i'm cat

: hello kitty

can not convert animal to dog

C C 的兩種多型形式

1 2 test.cpp4 5 created by mac on 15 8 11.6 7 8 include9 include10 using namespace std 11class person 基類person12 25person person 26 person person stri...

include的兩種指令形式

在程式設計過程中不在意的細節 搬運於c程式設計 include include stdio.h include使用尖括號的形式時,編譯系統從存放c編譯系統的子目錄中去找所要包含的檔案如 stdio.h 這稱為 標準方式 若使用 include指令是為了使用系統庫函式,因而要包含系統提供的相應標頭檔案...

寫出Singleton的兩種形式

public class test01singleton 餓漢式 class singleton1 private static singleton1 instance1 newsingleton1 加靜態是因為要被靜態呼叫 public static singleton1 getinstance ...