var num1 [10]int
var num2 [5]int
var num3 [5]int32
(1)三種各不相同,只有元素型別和長度都完全相同,陣列型別才相同
var num1 [3]int
num2 := [3]int
num3 := [...]int
(2)三種初始化方法
(3)陣列型別是值型別,不是引用型別(函式傳遞後只操縱陣列的備份)
type slice struct
(1)切片定義的幾種方法
var aa int
aa = make(int,4)
bb := make(int,4,6)
var num = [10]int
slice1 := num[2:5:8] // [2,3,4],len = 3,cap = 6
slice2 := num[2:5] // 這裡要注意slice之間的互相影響
slice3 := num[2:]
slice := num[:5]// [0,1,2,3,4]
slice := num[:]
(2)切片拷貝
slice2 := make(int ,3)
copy(slice2,slice1[1:4])
(3)常用函式
slice1 := make(int,0,2)
// range 遍歷 事實上是一種拷貝,並不影響原來的切片
for _,n := range slice
對映的構成,和對映鍵值對的插入刪除
students := make(map[string]int)
students["jack"] = 10
delete(students , "jack")
實現set:
map[string]struct{}
結構體的定義
type gender int
struct
type person struct
方法和函式的區別
func(p person) showinfo()else
}
結構體的初始化法方法
這裡注意到無論是指標還是結構體都是用.
// 1.直接初始化
// 2.使用&返回指標
// 3.使用new,返回結構體指標
描述某個型別有哪些方法。或者說乙個介面型別,定義了乙個方法集
空介面可以被認為是其他語言的「any」型別(println()為什麼什麼東西都能打?)
型別斷言
func main() = 123
// 1
n,ok := x.(int)
fmt.println(n,ok) // 123 true
// 2
a,ok := x.(float64)
fmt.println(a,ok) // 0 false
// 3
a := x.(float64) //產生乙個panic
}
func main()
fmt.println("主協程結束")
}
這裡注意到主協程一旦結束其他都結束
jmp模型
協程與執行緒最好是n:m的關係
協程的排程器的設計策略(如何減少開銷)
(1)復用執行緒
(2)利用並行
(3)搶占:限制協程執行時長
(4)全域性協程佇列:鍊錶實現
常用的同步控制機制:waitgroup
func main()(i)
} wg.wait()
}
併發模型csp
管道的操作有:讀寫關閉
ch := make(chan string)
a = <-ch
ch <- "hello" // 寫乙個已經關閉的channel就會引發panic
管道分類:無緩衝的管道(沒有額外的拷貝,讀在等寫)和有緩衝的管道(會發生額外的拷貝,緩衝區的最大是65535)
交替列印a和b,(1)b發出訊號(2)a列印,向b傳訊號(3)b...(4)列印完結束向主協程發訊號
package main
import "fmt"
func main()
func printa(ch1, ch2 chan string)
}func printb(ch1, ch2, ch3 chan string) else
}}
func main()
fmt.println(x,y,z) // 都是[0 1 2] [0 1 2 4] [0 1 2 4]
}
size := 3
data := make(int,size) // 使用data := make(int,0,size)則可以,這樣size只是cap
(4)關於指標
golang中兩種指標1.限制型指標(只能定址,但不能加減位址)2.無限制指標(unsafe.pointer)(可以任意寫記憶體)
什麼時候用指標(1.需要修改,不用的時候建議不用指標 2.容器佔記憶體較大(提高效能)(這裡注意到容器較小時因為有逃逸分析指標未必節省時間))
(5)關於panic
可以主動使用panic,常常和defer一起使用
func main()
}()panic("this is a panic")
} time.sleep(2*time.second)
fmt.println("end")
}
面試訓練營
1 重寫與過載之間的區別 方法過載 1 同乙個類中 2 方法名相同,引數列表不同 引數順序 個數 型別 3 方法返回值 訪問修飾符任意 4 與方法的引數名無關 方法重寫 1 有繼承關係的子類中 2 方法名相同,引數列表相同 引數順序 個數 型別 方法返回值相同 3 訪問修飾符,訪問範圍需要大於等於父...
TOT訓練營開篇
tot是 top of top 頂級中的頂級之意,tot 15是西安本地第一屆訓練營,我們是這一屆的第三批次,研發班兩個,總數為61個人,當然還有另外的測試沒有包括在內,測試也有兩個班,之前打聽到,測試是分自動化和業務測試的,其實我們也有劃分,只是當時老師們沒有說出來,據說,還有些專業專門考glod...
機器學習訓練營
邏輯回歸 logistic regression,簡稱lr 雖然其中帶有 回歸 兩個字,但邏輯回歸其實是乙個分類模型,並且廣泛應用於各個領域之中。雖然現在深度學習相對於這些傳統方法更為火熱,但實則這些傳統方法由於其獨特的優勢依然廣泛應用於各個領域中。而對於邏輯回歸而且,最為突出的兩點就是其模型簡單和...