Golang點滴記錄

2021-08-15 19:41:07 字數 1841 閱讀 4089

&a的位址是&a

*符號的意思是對指標取值,如:*&a,就是a變數所在位址的值,當然也就是a的值了

*&可以互相抵消,同時注意,*&可以抵消掉,但&*是不可以抵消的 

首先先明白一點:無緩衝=堵塞,緩衝=非堵塞 比如

c1:=make(chan int)        無緩衝

c2:=make(chan int,1)      有緩衝

c1<-1                            

無緩衝的 不僅僅是 向 c1 通道放 1 而是 一直要有別的攜程 <-c1 接手了 這個引數,那麼c1<-1才會繼續下去,要不然就一直阻塞著

而 c2<-1 則不會阻塞,因為緩衝大小是1 只有當 放第二個值的時候 第乙個還沒被人拿走,這時候才會阻塞。

打個比喻

無緩衝的  就是乙個送信人去你家門口送信 ,你不在家 他不走,你一定要接下信,他才會走。

無緩衝保證信能到你手上

有緩衝的 就是乙個送信人去你家仍到你家的信箱 轉身就走 ,除非你的信箱滿了 他必須等信箱空下來。

有緩衝的 保證 信能進你家的郵箱

go語言裡面的comma-ok斷言

語法可以直接判斷是否是該型別的變數: value, ok = element.(t),這裡value就是變數的值,ok是乙個bool型別,element是inte***ce變數,t是斷言的型別。如果element裡面確實儲存了t型別的數值,那麼ok返回true,否則返回false。

一句話總結:切片是動態陣列,注意兩者初始化和函式引數的區別

切片是長度可變、容量固定的相同的元素序列。go語言的切片本質是乙個陣列。容量固定是因為陣列的長度是固定的,切片的容量即隱藏陣列的長度。長度可變指的是在陣列長度的範圍內可變。

1、初始化:陣列需要指定大小,不指定也會根據初始化的自動推算出大小,不可改變,切片不需要指定大小 

注意slice和陣列在宣告時的區別:

宣告陣列時,方括號內寫明了陣列的長度或使用...自動計算長度 。

arr :=[...]int、arr :=[5]int

而宣告slice時,方括號內沒有任何字元。

slice := int、slice:=make(int,len,cap)

值傳遞只是將變數的內容複製乙份而已,

函式進行操作的其實是另乙個變數,只是另乙個變數的值和傳遞的

變數值是相同的。

而位址傳遞是直接把變數的位址傳遞給

函式,這時

函式是直接對原來的變數進行操作的。所以值會變化。

golang的new和make主要區別如下:

1、make只能用來分配及初始化型別為slice,map,chan的資料;new可以分配任意型別的資料

2、new分配返回的是指標,即型別*t;make返回引用,即t;

3、new分配的空間被清零,make分配後,會進行初始化。

(本質來講,導致這三個內建型別有所不同的原因是:引用在使用前必須被初始化,make初始化了內部的資料結構,填充適當的值。make返回初始化後的(非零)值。)

閉包(closure)是匿名函式的乙個特例。當乙個匿名函式所訪問的變數定義在函式體的外部時,就稱這樣的匿名函式為閉包。

oracle點滴記錄

表空間自動拓展 1 檢視表空間 select from dba data files where tablespace name tablespace 2 檢視表空間大小 select tablespace name,sum bytes 1024 1024 from dba segments gro...

實習之點滴記錄

本來只是想用一種比較客觀的心態和態度記錄下自己這四個月在微軟的所學所感,但是不知不覺還是染了主觀主義。離實習期結束還有大半個月,這時候才發現我要找工作了。在現實轉悠了一圈才發現自己還很幼稚,要學的很多,想走的念頭越來越強。每天逼著自己學些東西,我不知道目標是什麼?未來是什麼?四個月的實習期,我見識了...

WinCE點滴記錄 Bootloader

wince的系統生成過程 sysgen build copy make bootloader的架構 blcommon,oem eboot和網路驅動程式 blcommon oem edbg網路驅動 eboot bootpart flash fmd ne200 rtl8139 82559er blcom...