Go语言编程笔记

2015-08-15  本文已影响196人  冰天

1.第1章 初识Go语言

  1. 介绍了好多工具,我这里使用sublime text3 + window的go1.4进行学习。
    需要安装gosublime插件,都很简单,不再赘述.

2. 第二章 顺序编程

  1. 多重赋值可以交换变量的值 的 i,j = j,i
  2. Go语言的预定义常量: ture , false 和iota 。
    const (
    c0 = iota //0
    c1 //1
    c2 //2

3.go里的数组只能传值,不能传值。 数组切片(slice)能实现动态数组和传址,它特别像一个指向数组的指针, 当然他有自己的数据结构。

  1. map语句
    package main
    import "fmt"
    // PersonInfo是一个包含个人详细信息的类型
    type PersonInfo struct {
    ID string
    Name string
    Address string
    }
    func main() {
    var personDB map[string] PersonInfo
    personDB = make(map[string] PersonInfo)
    // 往这个map里插入几条数据
    personDB["12345"] = PersonInfo{"12345", "Tom", "Room 203,..."}
    personDB["1"] = PersonInfo{"1", "Jack", "Room 101,..."}
    // 从这个map查找键为"1234"的信息
    person, ok := personDB["1234"]
    // ok是一个返回的bool型,返回true表示找到了对应的数据
    if ok {
    fmt.Println("Found person", person.Name, "with ID 1234.")
    } else {
    fmt.Println("Did not find person with ID 1234.")
    }
    }

  2. 变参函数的语法糖
    func Printf(format string, args ...interface{}) {
    // ...
    }
    形如 ...type 格式的类型只能作为函数的参数类型存在,并且必须是最后一个参数。它是一个语法糖(syntactic sugar) ,即这种语法对语言的功能并没有影响,但是更方便程序员使用。
    如果没有语法糖,将这么写:
    func myfunc2(args []int) {
    for _, arg := range args {
    fmt.Println(arg)
    }
    则调用方比如构造一个数组切片来处理: myfunc2([]int{1, 3, 7, 13})

  3. 触发错误处理panic和recover的处理
    defer func(){
    if r: = recover(); r != nil{
    log.Printf("Runtime error caught: %v", r)
    }
    }()

    foo()
    

    无论foo()是否触发了错误处理流程,该匿名defer函数

上一篇下一篇

猜你喜欢

热点阅读