A Tour of GO (3)--More Types

  1. Pointers
    • *T is type: a pointer to T.
      var x *int
    • Operator & generate a pointer to its operand
      i :=42
      p =&i
    • The * operator denote the pointer's underlying value.
      i = 43
      fmt. Println(
      i)
  2. Struct
    type Vertex struct{
    X int
    Y int
    }
  • Fields are accessed using dot.
  • Struct fields can be accessed through pointers and dot.
    v := Vertext {1,2}
    p = &v
    p.X = 10
  • Struct literals denote the fields of the struct by listing. You can specify only part of them using Name: syntax.
    v1 = Vertex{1, 2} // has type Vertex
    v2 = Vertex{X: 1} // Y:0 is implicit
    v3 = Vertex{} // X:0 and Y:0
    p = &Vertex{1, 2} // has type *Vertex
  1. Array
    The type [n]T is an array of n values of type T
  • The size of an array is part of its type. So it cannot be resized *

  • Slice: a slice points to an array of values and also include a length.

    • []T is a slice of type T

    • len(s) return the length of slice s.

    • Slice can be nested( slice of slices).

    • Slicing slices: Slices can be re-sliced, creating a new slice value that points to the same array.
      s[lo:hi] evaluate slice from lo to hi-1 inclusively.

    • Make slices:
      a := make([]int, 5) // len(a)=5
      b := make([]int, 0, 5) // len(b)=0, cap(b)=5

    • Zero of slice is nil

    • Adding elements to slice.
      func append(s []T, vs ...T) []T

    • Range is a form of for loop. Two values are used. The first one is the index and the second is the value in the array.

       var pow = []int{1, 2, 4, 8, 16, 32, 64, 128}
      
       func main() {
          for i, v := range pow {
             fmt.Printf("2**%d = %d\n", i, v)
          }
       }
      

      You can skip the index or value by assigning to _.
      pow := make([]int, 10)
      for i := range pow {
      pow[i] = 1 << uint(i)
      }
      for _, value := range pow {
      fmt.Printf("%d\n", value)
      }

  1. Map
  • Map must be created with make before used
  • var m = map[sting] Vertex key is of type string and value is of type Vertex.
  • Mutating maps:
    • Insert
      m[key]=elem
    • Retrieve
      elem= m[key]
    • Delete
      delete (m , key)
    • Test existence
      elem, ok = m[key]
      if the key is in m, ok is true. IF key is not in m, elem is the zero value of that type.
  1. Function values
    Go functions may be closures. A closure is a function value that references variables from outside its body. The function may access and assign to the referenced variables; in this sense the function is "bound" to the variables.
func adder() func(int) int {
  sum := 0
  return func(x int) int {
    sum += x  
    return sum
  }
}

func main() {
  pos, neg := adder(), adder()
  for i := 0; i < 10; i++ {
    fmt.Println(
        pos(i),
        neg(-2*i),
    )   
  }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342

推荐阅读更多精彩内容

  • 标签(空格分隔): 编程 Go官方文档 Using the tour 1.1 Hello, 世界 Welcome...
    uangianlap阅读 1,488评论 0 5
  • **2014真题Directions:Read the following text. Choose the be...
    又是夜半惊坐起阅读 9,355评论 0 23
  • 当所有等待变成曾经,我会说好多精彩的故事给你听—«远行» J.K.Rolling 的«哈利波特»中有一本启迪主人公...
    你好狐狸君阅读 630评论 0 0
  • 除了和伴侣吵架之外,生活中我们有时也会跟邻居吵架,或者工作中和同事吵架。今天想分享最近一次吵架经历。 那是大年初七...
    鱼与酱阅读 709评论 0 0
  • 你拉黑了我的所有联系方式,却说我出现的太迟,想要了解你的心事,可你从来不解释,那些无法释怀的事,你我都可知,而你自...
    泽成阅读 175评论 0 0