1. 程式人生 > >go語言的type的比較和賦值

go語言的type的比較和賦值

type的比較

兩個型別要麼相同要麼不相同。

  • 如果兩個命名型別起源於同樣的宣告;
  • 一個命名型別和不具名型別永遠不相同;
  • 兩個不具名型別相同如果他們擁有同樣的字面結構且對應成員有相同的型別。具體的規則如下:
  • 兩個array type相同如果他們擁有相同的element type和同樣的陣列長度
  • 兩個slice type相同如果他們擁有相同的element type
  • 兩個struct type相同如果他們有相同順序的field,並且對應的field擁有相同的名字、型別、tag;兩個不具名field被認為擁有相同的名字。不同package的非匯出(小寫開頭)型別總是被認為不相同。
  • 兩個指標相同如果指向相同的型別
  • 兩個函式型別相同如果擁有同樣個數的引數和返回值,且對應的具有相同的型別,且要麼都是可變引數要麼都不是可變引數,不需要具有同樣的引數名字
  • 兩個interface相同如果他們擁有同樣的方法集合(方法名字相同且方法型別相同)順序不重要。不同package的非匯出方法始終不相同
  • 兩個map相同如果擁有相同的key type和element type。
  • 兩個channel相同如果擁有同樣的型別和同樣的方向。
type (
    T0 []string
    T1 []string
    T2 struct{ a, b int }
    T3 struct{ a, c int }
    T4 func
(int, float64) *T0 T5 func(x int, y float64) *[]string )

下面的型別是相同的:
T0 and T0
[]int and []int
struct{ a, b *T5 } and struct{ a, b *T5 }
func(x int, y float64) []string 和 func(int, float64) (result []string)
下面的型別是不同的
T0 and T1 //因為他們是兩個有不同宣告的具名型別
func(int, float64) T0 和 func(x int, y float64)

[]string //因為T0和[]string不同

賦值

在下列情況中,一個值x可以被賦值給一個T型別的變數:

  • x的型別和相同
  • x的型別V和T擁有同樣的底層型別且V和T中至少一個不是具名型別
  • T是一個interface型別且X的型別V實現了T
  • x是一個雙向channel,T是一個channel型別,x的型別V和T具有同樣的element type,且至少一個不是具名型別。
  • x是nil且T是pointer, function, slice, map, channel, or interface型別
  • x是一個沒有型別的常量且可以被T的值表示
    const z = 1 其中z就是一個沒有型別的常量

相關推薦

go語言type比較

type的比較 兩個型別要麼相同要麼不相同。 如果兩個命名型別起源於同樣的宣告; 一個命名型別和不具名型別永遠不相同; 兩個不具名型別相同如果他們擁有同樣的字面結構且對應成員有相同的型別。具體的規則如下: 兩個array type相同如果他們擁有相同的el

go語音基礎之陣列比較

1、go語音基礎之陣列比較和賦值 示例: package main //必須有個main包 import "fmt" func main() { //支援比較,只支援 == 或 !=, 比較是不是每一個元素都一樣,2個數組比較,陣列型別要一樣 a := [5]int{1, 2,

易學筆記-go語言-第4章:基本結構基本資料型別/4.4 變數/4.4.2 宣告語句結合

宣告和賦值語句結合 格式:var identifier [type] = value 這裡的type是可選的,具體的型別參照: 第4章:基本結構和基本資料型別/4.2 Go 程式的基本結構和要素/4.2.8 型別 顯式型別舉例: //整型 var a&nbs

GO語言學習:變數的宣告

在此處學習幾種典型的做法 1.和其他語言一樣的定義方法   var name string   //go定義一個字串   name="jxd";     //賦值   2.型別推斷   var name="jxd"   

C語言結構體數組內帶字符數組初始化

指定 char 字符數 全局 種類 def 變量 指針 變量定義 1.首先定義結構體數組: typedef struct BleAndTspRmtCmd{ char terminal[3]; char note[3]; char rmtCmd[10]; char cmdP

微控制器c語言變數的定義

  如果省略儲存器型別,系統則會按編譯模式SMALL,COMPACT或LARGE所規定的預設儲存器型別去指定變數的儲存區域。無論什麼儲存模式都可以宣告變數在任何的8051儲存區範圍,然而把最常用的命令如迴圈計數器和佇列索引放在內部資料區可以顯著的提高系統性能。還有要指出的就是變數的儲存種類與儲存器型別是完全

C語言指標的初始化

1、指標的初始化 指標初始化時,“=”的右運算元必須為記憶體中資料的地址,不可以是變數,也不可以直接用整型地址值(但是int*p=0;除外,該語句表示指標為空)。此時,*p只是表示定義的是個指標變數,並沒有間接取值的意思。 例如: int a = 25; int *pt

Go語言學習-maininit

都是 函數 很多 學習 導入 同時 如果 ack 它的 main 函數和 init 函數Go裏面有兩個保留的函數: init 函數(能夠應用於所有的 package )和 main 函數(只能應用於 package main )。這兩個函數在定義時不能有任何的參數和返回值。

Python中的可變、不可變對象技巧序列解包

lis 我們 最大 pac 唯一標識 src 技術分享 efault pre 可變對象和不可變對象 在python中一切皆對象。在Python中不存在所謂的值傳遞調用,一切傳遞都是對象的引用,也可認為是傳址。 python中,對象分為可變(mutable)和不可變(imm

Go語言-切片map

package pri code [] print UNC AR make 運行 實例 package main import ( "fmt" ) func main() { arr := make([]i

go語言爬蟲goquerygrequests的使用

gen times name lac like index htm syn stop /*下載工具*/ package main import ( "fmt" //go語言版本的jquery "github.com/Pue

List.addAll()=的區別

移動 handler -name .com ted lang mark i++ get 前天做一個發起群聊的功能,需要做一個成員去重以及一個另一個群的成員列表 當時直接把參數賦值給了兩個不同的集合參數,但是執行後發現兩個集合的數據並不是各自處理的結果,而是保持了兩個

jquery,js,checkbox多選框復選框取

ber javascrip 支持 substr i++ 不想 put pre htm 今天一個同事不太會多選框的取值和賦值的問題,我幫他解決了一下,不想自己想的朋友可以參考一下。 獲取checkBox的值,checkBox的html如下 <input type

如何理解深淺拷貝的區別?

軟連接 都對 brush 自己 lba 9.png 元素 遞增 app 拷貝分為:賦值,淺拷貝,深拷貝,拷貝程度一次遞增 賦值: 賦值就是相當於做了個軟連接,所以不管你是修改了鏈接文聯的內容還是源文件的內容,這個文件都會有所改變(相當於鏡子裏的自己).

Go語言學習--常量變量

返回 編譯錯誤 必須 數字 編譯器 計算表達式 兩個 但是 長度 1. 常量 常量中的數據類型只可以是布爾型、數字型(整數型、浮點型和復數)和字符串型 定義格式: const identifier [type] = value, [type]可以省略,編譯器會根據變量的值

Go語言sync庫WaitGroup的使用

%d 調用 如果 運行時 main函數 fmt package 信號量 計數 // code_041_sync_WaitGroup project main.go package main import ( "fmt" "sync" ) func mai

Mat 的幾種初始化方法

cto 轉換 -m mat tro sha 數據 return main 這幾天用到了由cv::Point3f和std::vector<float>到cv::Mat數據類型的轉換。本質上就是換一下容器。今晚做個小總結。 由Point3f 到 Mat 有兩種方法,

go語言之JSON與md5

變量 數據交互 student val 解析 hash 消息 Go語言 json go語言之JSON與md5值 一、Json是什麽? 是一種輕量級的數據交換語言,用於數據交換。Json由於比XML更小、更快、更易解析,以及瀏覽器的內建快速解析支持,使得其更實用於網絡數據交

找工作筆試面試那些事兒(5)---建構函式、解構函式函式

作者:寒小陽 時間:2013年9月。 出處:http://blog.csdn.net/han_xiaoyang/article/details/10833931。 宣告:版權所有,轉載請註明出處,謝謝。 類的建構函式、解構函式與賦值函式     &

影象畫素點讀取

//取IplImage影象畫素值 int main() {     IplImage* src = cvLoad("filename",0); //-1預設讀取原通道,0 灰度圖,1彩色圖     if(src!=0)  &nb