美文网首页
Go语言编程笔记

Go语言编程笔记

作者: 冰天 | 来源:发表于2015-08-15 15:06 被阅读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)能实现动态数组和传址,它特别像一个指向数组的指针, 当然他有自己的数据结构。

    • 基于数组创建slice:
      var myArray [10]int = [10]int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
      //基于 myArray 的所有元素创建数组切片:
      mySlice = myArray[:]
      //基于 myArray 的前5个元素创建数组切片:
      mySlice = myArray[:5]
      //基于从第5个元素开始的所有元素创建数组切片:
      mySlice = myArray[5:]

    • 直接创建(使用make)
      //创建一个初始元素个数为5的数组切片,元素初始值为0,并预留10个元素的存储空间:
      mySlice2 := make([]int, 5, 10)

    • slice数组的遍历和正常的数组遍历一样
      for i, v := range mySlice{
      fmt.Printfln("mySlice[", i, "] = ", v)
      }

    • 增加数组的元素
      fmt.Println("len(mySlice):", len(mySlice)) //计算mySlice数组切片中当前所存储的元素个数
      fmt.Println("cap(mySlice):", cap(mySlice)) //计算mySlice数组切片分配的空间大小
      mySlice = append(mySlice, 1, 2, 3) //追加三个元素
      mySlice = append(mySlice, mySlice2...) //打散追加mySlice2的元素,注意...不可以去掉

      copy(slice2, slice1) // 只会复制slice1的前3个元素到slice2中
      copy(slice1, slice2) // 只会复制slice2的3个元素到slice1的前3个位置

    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函数

    相关文章

      网友评论

          本文标题:Go语言编程笔记

          本文链接:https://www.haomeiwen.com/subject/wbqbqttx.html