1. 程式人生 > >Go學習筆記之高階資料型別

Go學習筆記之高階資料型別

高階資料型別,僅僅是做個概念認識,等到其他相關知識的學習時,再著重分析。

1 function

將 function 作為資料型別的語言有很多,函數語言程式設計的核心理念。

function 是“第一等公民”,function 與其他資料型別一樣,處於平等地位,可以賦值給其他變數,也可以作為引數,傳入另外一個 function ,或者作為別的 function 的返回值。

在 Go 語言中,進行賦值的首要條件是型別一致,function 賦值給其他變數的前提是,必須 function 簽名一致才認為是相同型別,否則編譯報錯。 

這裡需要引入一個新的概念,函式簽名(即函式的型別簽名)。函式簽名就是一個函式不包含函式主體部分,也就是函式的引數型別和返回值型別。例如

func func1(a int) int {
    // body
}

則其函式簽名為

func1(int) int //可以不用包含形參名和返回結果名

例如

func test_func_signature() {
 var var1 func(int) int
 var var2 func(a int) int
 var var3 func(b int) int
 var1 = func1
 var2 = func1
 var3 = func1
 fmt.Printf("%s", var1) // 三者輸出一致 
 fmt.Printf("%s", var2) // 三者輸出一致 
 fmt.Printf("%s", var3) // 三者輸出一致
}
func func1(a int) int {
 return a
}

由於 function 本身是資料,就可以同其他資料型別一樣複合成更加複雜的資料型別,例如閉包(巢狀function)和物件(自定義型別)。

對於物件的方法,用Rob Pike的話來說就是:

“A method is a function with an implicit first argument, called a receiver.“(方法就是一個有接受者的函式)

receiver 有一個限制,不能是內建基礎型別,只能是 type 關鍵字自定義的型別,但是有一個例外,自定義的 interface 是不能作為 receiver 。

2 interface

Go語言中 interface 同其他語言中 interface(介面) 不一樣,具體如下:

a、interface 也是“第一等公民”,也就是說 interface 其實也是一種資料型別。即能賦值給其他變數、作為引數和返回值。

b、interface 是函式(簽名)的集合,不用像 JAVA 語言在需要實現 interface 的 class 上顯式宣告,只要需要某個型別包含了 interface 包含的函式集合,就能說該型別實現了這個interface。

c、interface 由於是函式的集合,也就是說面向的是能做為 function 的 receiver 的型別,而不像其他語言是面向 class 的。

interface 型別賦值時,只有型別相同才能賦值 ,否則會編譯報錯( cannot use AAA as type BBB in assignment), interface 型別怎麼確認型別相同?

只要具體型別的方法(函式)集合中包含 interface 所規定的方法(函式)集合(必須簽名一致,順序無所謂),就確認型別相同。

參考:

相關推薦

Go學習筆記高階資料型別

高階資料型別,僅僅是做個概念認識,等到其他相關知識的學習時,再著重分析。 1 function 將 function 作為資料型別的語言有很多,函數語言程式設計的核心理念。 function 是“第一等公民”,function 與其他資料型別一樣,處於平等地位,可以賦值給

學習筆記Python資料型別-Number

Number Python 2 中的數字,支援int, float, bool, complex, long這些資料型別,其中long(即長整型)很少用。 int >>> v1 = 10 >>> type(v1) #type()方法可

學習筆記Python資料型別-String

字串 字串或串(String)是由數字、字母、下劃線組成的一串字元。一般記為s=“a1a2···an”(n>=0)。它是程式語言中表示文字的資料型別。 兩個字串相等的充要條件是:長度相等,並

Pythonnumpy學習筆記(一) 標準資料型別

文章目錄 一、numpy標準資料型別 二、建立陣列的方式 一、numpy標準資料型別 當構建一個數組時,可以用一個字串引數來指定資料型別 np.zeros(10, dtype

python學習筆記02 --------------基礎資料型別

python的基本資料型別: 1.基本資料 1.1. 數字型別 1.1.1 整數 int int()           #將括號內內容轉化為整數型別。 1.1.2 浮點數 float 1.1.3 複數 complex  

python筆記基礎資料型別

八大基礎資料型別 int python 中沒有溢位,再大的值也可以用int num = 10 num++ 報錯,num只是儲存資料10的容器,容器不可以自增自減 print(num) # 列印容器中存放的值10 地址 print(id(num)) # id

python的學習筆記01_4基礎資料型別列表 元組 字典 集合 其他其他(for,enumerate,range)

列表 定義:[]內以逗號分隔,按照索引,存放各種資料型別,每個位置代表一個元素  特性:    1.可存放多個值    2.可修改指定索引位置對應的值,可變    3.按照從左到右的順序定義列表元素,下標從0開始順序訪問,有序 、建立列表 只要把逗號分隔的不同資料項,使用方括號[],括起來即可,

Object C學習筆記1-基本資料型別說明

Objective-C資料型別可以分為:基本資料型別、物件型別和id型別。基本資料型別有:int、float、double和char型別。物件型別就是類或協議所宣告的指標型別,例如:NSAutoreleasePool * pool,其中NSAutoreleasePool是一個類,NSAutoreleasePo

C#學習筆記整理1--資料型別

什麼是資料型別(Data Type) A data type is a homogeneous collection of values, effectively presented, equiipped with a set of operations wh

Redis學習筆記基本資料結構

Redis基礎資料結構 Redis有5種基本資料結構:String(字串)、list(列表)、set(集合)、hash(雜湊)、zset(有序集合) 字串string 字串型別是Redis的value最簡單的資料結構,類似與Java語言中的ArrayList(數

go學習筆記(2):資料結構

Go語言不是一門面向物件的語言,沒有物件和繼承,也沒有面向物件的多型、重寫相關特性。 Go所擁有的是資料結構,它可以關聯方法。Go也支援簡單但高效的組合(Composition),請搜尋面向物件和組合。 雖然Go不支援面向物件,但Go通過定義資料結構的方式,也能實現與Class相似的功能。 一個簡單的例子,

JavaScript學習記錄JS資料型別

學習目標: 1.認識JavaScript的資料型別 基本型別:undefined、unll、Boolean、Number、String 引用型別:object、function、Array 2.認識

Java學習筆記:Redis-資料型別

1、Redis介紹 Redis是一種面向“key-value”型別資料的分散式NoSQL資料庫系統,具有高效能、持久儲存、適應高併發應用場景等優勢,是一個高效能的鍵值對(key-value)資料庫。 2、Redis資料結構型別 Redis整體的資料結構都是key-value(鍵值對)形式

Python學習筆記 Day7 對資料型別的總結、input輸入及函式定義

Day 7 對資料型別的總結、input輸入及函式定義 複習前6天的內容 Python基本資料型別之一 python基本資料型別之二: 列表複習聯絡 問題:用remove,結合for或者while刪除列表內容: bicycles = ['trek', 'canno

視覺化學習筆記1:資料型別

資料型別彙總 定量 定量資料是可以用數字衡量的資料,例如溫度、金錢和貓咪的抓痕數。你可以將定量資料分成兩組:連續資料和離散資料。離散資料只能包含特定的值。例如,交易售出的商品數量只能是正整數,你不可能購買 2.5 個枕頭(或 2.5 只

python學習筆記1(資料型別

資料編碼 原碼、反碼、補碼 原碼:規定了位元組數,寫明瞭符號位,就得到了資料的原碼 反碼:正數的反碼是其原碼,負數的反碼是其原碼的符號位不動,其他位取反 補碼:正整數的補碼是其二進位制表示,與原碼相同,負整數的補碼,將其原碼除符號位外的所有位取反(0變1,1變0,符號位為1不變)後加1。

go語言基礎基礎資料型別 bool型別

1、bool型別  示例1: package main import "fmt" func main() { var a bool a = true fmt.Println("a = ", a) } #執行結果 a = true

python學習筆記--基本的資料型別

1、基礎的資料型別 ''' 基本的資料型別 ''' #1、boolean print("true:",True) print("false:",False) ''' 2、空值None,None不能理解為0,因為0是有意義的,而None是一個特殊的空值。 ''' ''' 3、python中的除法

Typescript 學習筆記二:資料型別

中文網:https://www.tslang.cn/ 官網:http://www.typescriptlang.org/ 目錄: Typescript 學習筆記一:介紹、安裝、編譯 Typescript 學習筆記二:資料型別 Typescript 學習筆記三:函式 Type

MySQL學習筆記:基本資料型別與查詢操作

#客戶端將資料儲存到資料庫伺服器上的過程     1、連線到伺服器 mysql -u xxx -p xxx     2、選擇一個庫 use xxx     3、建立表或者修改表    &