golang一些知識點

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

2.冒泡排序(二維數組使用):

func main() {i := 1MYLABEL:for {i++if i > 3 {break MYLABEL}}fmt.Println("MYLABEL")}// Label名稱隨意,必需寫在for迴圈前面

  

2.冒泡排序(數組使用):

 

func main() {var arr [6]int = [6]int{1, 9, 8, 500, 45, 2}arrSize := len(arr)for i := 0; i < arrSize; i++ {//fmt.Println(arr)for j := i; j < arrSize; j++ {if arr[i] < arr[j] {tmp := arr[i]arr[i] = arr[j]arr[j] = tmp}}}fmt.Println(arr)}

  

3.slice擴容引起的問題:
切片的資料結構:

slice在擴容會產生一個新的slice,再將原來的slice拷貝到新的slice,然後append.這將導致元素的地址發生變化.
樣本:

func main() {slice := make([]int, 2, 5)slice[0] = 10slice[1] = 20fmt.Printf("%p\n", slice)slice = append(slice, 1, 2, 5, 6)fmt.Printf("%p", slice)}

因為有擴容,兩次列印的slice數組的地址不一致.

slice作為函數參數時,傳遞了一個引用,我們append一個元素後,期望得到增加元素的slice,但事實上並沒有:

func main() {slice := make([]int, 0)changeSlice(slice)fmt.Println(slice)}func changeSlice(slice []int) {slice = append(slice, 10)}// 輸出: [],並沒有增加元素這是因為切片擴容,導致了數組地址發生了變化.

所以應該將以上代碼改為讓其返回slice,並賦值:

func main() {slice := make([]int, 0)slice = changeSlice(slice)fmt.Println(slice)}func changeSlice(slice []int) []int {slice = append(slice, 10)return slice}

  

4.switch type的一個例子:

type Phone interface {Call()}type Android struct {name string}func (android *Android) Call() {fmt.Println(android.name)}func main() {android := &Android{name: "LG"}HangUp(android)}func HangUp(all Phone) {switch v := all.(type) {case *Android:fmt.Println("HangUp", v.name)default:fmt.Println("unknow device")}}

  

使用斷言:

func HangUp(all Phone) {if a, ok := all.(*Android); ok {fmt.Println(a.name)return}fmt.Println("unknow device")}

  

5.fallthrough:

fallthrough強制執行後面的case代碼,fallthrough不會判斷下一條case的expr結果是否為true

 

func main() {a := 1switch a {case 1:fmt.Println("1")fallthroughcase 2:fmt.Println("2")default:fmt.Println("no match")}}// 輸出1 2, 第二個case並沒有判斷a是不是等於2

  

6.goroutine同步:sync

 

import ("fmt""runtime""sync")func main() {runtime.GOMAXPROCS(runtime.NumCPU())wg := sync.WaitGroup{}wg.Add(10)for i := 0; i < 10; i++ {go work(&wg, i)}wg.Wait()}func work(wg *sync.WaitGroup, index int) {fmt.Println(index)wg.Done()}

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.