golang 基礎知識1

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

1.slice和array

package main

import (
    "fmt"
  )

func main() {
  s := []int{1, 2, 3}
  ss := s[1:]
  for i := range ss {
    ss[i] += 10      //slice中改變數組的值會將原數組中的值改變
  }
  fmt.Println(s)
  ss = append(ss, 4) //append後的值賦給了變數ss,則ss就不會指向原數組
  fmt.Println(ss)
  for i := range ss {
    ss[i] += 10
  }
  fmt.Println(ss)
  fmt.Println(s)
}

//結果

[1 12 13]
[12 13 4]
[22 23 14]
[1 12 13] 

2.:= 與var

:=必須用在func內部,var可以產生一個全域的變數

沒聲明和已經聲明的都可以用 := ,但是沒有聲明的不能直接用 =:

  x, _ := f() //錯,x已經聲明不需要用 :=

  x, _ = f()   //對, x已經聲明可以直接使用 =

  x, y := f()  //對, y沒有聲明

  x, y = f()   //錯, y沒有聲明,不能直接使用 =

3.map的正確使用方法

使用map,必須使用make產生map,否則不能初始化map的值。
var m make(map[string]int)   //使用make來初始化map
for key, ok :=
m["b"]; ok { //使用ok來判斷遍曆的正確是否,不用其他方式
  println(v)

  }


4.strct 的初始化和調用

  //定義struct

type Student struct {id      intname    stringaddress stringage     int}
1.賦值方式:
     var s *Student = new(Student)s.id = 101s.name = "Mikle"s.address = "紅旗南路"s.age = 18
2.var s1 *Student = &Student{102, "John", "Nanjing Road", 19}
這兩種都是指標類型的。package main
type S struct {    m string}func f() *S {    return &S{"foo"} //A}func main() {    p := *f()  //B,這裡加*是表示返回的是指標類型 *&正好中和,*是擷取指標的值。    print(p.m) //print "foo"}

5.傳參是傳指標還是具體的變數。

如果參數func(p *
interface{}) 則只能傳指標類型,
如果參數func(p interface{})  可以傳指標和具體變數。
package maintype S struct {}func f(x interface{}) {}func g(x *interface{}) {}func main() {    s := S{}    p := &s    f(s) //A correct    g(s) //B incorrect    f(p) //C correct    g(p) //D incorrect}
6.存指標的map的方式,指標是*int
m := make(map[int]*int)
7.for迴圈的i,擷取臨時變數的指標,由於go的閉包屬性,

package main

const N = 3

func main() {
  m := make(map[int]*int)

  for i := 0; i < N; i++ {
    m[i] = &i //A
  }

  for _, v := range m {
    print(*v)
  }
}

由於閉包關係,最後所引用的值,則是最後一個的值。因此要改變這種情況,最好是在for迴圈內再重新常見一個變數

package mainconst N = 3func main() {m := make(map[int]*int)for i := 0; i < N; i++ {j := int(i)    //這是一個新的變數,因此不會被後來者覆蓋。m[i] = &j}for _, v := range m {print(*v)}}

 8.var 的全域變數定義

     必須要聲明變數的類型,例如: var s int


 






聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.