2016-05-14 30 views
13

Yazar, "Harekete Geçin" adlı kitapta, "Uyumlu olsalar bile birbirilerine atanan iki farklı türün değerleri" yazdı. Örneğin, Duration, int64 veya int64 için Duration'a atayamazız. Örneğin,. Bu iki durum arasında fark nedirBir değişkene neden farklı bir değer atayabilirim?

type X []int 
var v []int = X([]int{1, 2, 3}) 

: X değer otomatik []int geri dönüştürülür gibi

Ama bu her zaman doğru değildir, aşağıdaki atama çalışacak?

cevap

11

Ben spec sevk ve burada en anlamlı satırları alıntı edeceğiz:

bir değeri x tipi T bir değişkene atanabilir olan Bunlardan herhangi birinde ("x T atanabilir olan") durumlar:

...

  • x kullanıcısının tip V ve T özdeş yatan türleri ve V'nin en az birine sahip veya T adlandırılmış bir tür değil. Örnekte

yatan tip her durum için []int ve []int adlandırılmış tip ama bir dilim değildir. Bir int aslında (evren bloğunda predeclared) adlandırılmış bir tür oluşturacak ve altta yatan bir tip olarak kendini olurdu ama []int detaylı here olarak adlandırılan türü değil: sayısal boolean

Named örnekler ve dize türleri, önceden bildirilmiş şeklindedir. Kompozit türleri — dizi, yapı, işaretçi, işlev, arabirimi, dilim, harita ve kanal türleri — yazımları kullanılarak oluşturulabilir.

her tipi T bir alt türü vardır: T yatan tipi T-kendisi tekabül predeclared boolean, sayısal veya dize türleri veya değişmez bir tür biri değilse. Aksi halde, T'nin temelindeki tipi, T'nin kendi türünde bildiriminin türünü ifade ettiği türden temel türdür. Eğer type X int yapma çalıştı eğer

nedenle değil adlandırılmış tip int olarak var v int atamak mümkün olduğu olurdu ve spec verilen DEVRETME kriterlerini yerine olmaz.

İlgili konular