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 ...