首页 > 代码库 > [学] GO 语言学习笔记(一)

[学] GO 语言学习笔记(一)

1. 变量

  var  <名称>   类型

 

2. 初始化

  var v1 int  = 10

  v3 := 10    // v3 不可以是已经声明过的变量

 

3. 忽略返回值

  _, _, Nick = GetName()

 

4. 常量 & iota

  const Pi   float64 = 3.1415

  const (

    size  int64 = 1024

    eof = -1

  )

  const  a, b, c = 3, 5, "XX"

 

  const (

    v1 = 1 << iota

    v2

    v3

  )    // iota 在下一个 const 之前, 从 0 开始递增

    

5. os.GetEnv("HOME")

 

6.大写开头,包外可见

 

7. uintptr

  浮点比较 -- 使用精度差

 

8. 复数

  v = Complex(3.1, 3.2)

  real(v) == 3.1

  imag(v) == 3.2

 

9.字符串,不能以 [x] 的方式赋值

 

10. 字符串类型

  byte   --- uint8

  rune  ---- Unicode 字符

 

11. 数组声明

  var   array_ex   [32]byte  =  [32]byte { 1, 2, ... }

  len()

  为值类型,在 fun 内部修改,不影响 fun 外部值

 

12. 数组切片

  var  myS  []int  = array_ex[:5]

  var  mySl = make([]int, 5)

  mySli := []int{1, 2, 3}

 

13. len / cap / append

  len(slice) = 元素个数

  cap(slice) = 已经分配的内存

  .append()

 

  myS = append(myS, 1, 2, 3)

  myS2 := []int{8, 9, 10}

  myS3 = append(myS, myS2...)    /// 打散 myS2 , 以多个元素加入  , append 参数需求

 

14.copy()

  copy(s1, s2)    // 以较小者来决定复制的大小

 

15.

  map

  var personDB  map[string] PersonInfo

  personDB = make(map[string] PersonInfo)

  personDB["123"] = PersonInfo{"123", "Tom", "Room 203"}

  

  person, ok := personDB["123"]

  if ok XXX

 

  myMap = make(map[string] PersonInfo, 100)

  delete(myMap, "123")

 

16. 

  if  return else return 

  需要一个最终的 return

 

17. fallthrough

  switch  X  {

    case 0:

    ....

    fallthrough   // 继续 case 

    default:

  }

 

18. for { 无限循环

  没有 while 语句

 

19.  goto

 

20. 函数

  func  <func-name>  (var ...)  (ret ...) { ...

 

21. 不定参数

  func  myFunc(args  ...int)  {

    for  _, arg  :=  range  args {

    }

  }

  调用

  myFun ( [] int {1, 2, 3, 5} )

  参数传递:

    fun  A ( args  ...int) {

      B(args...)

      C(args[1:]...)

    }

 

22. 任意类型

  func  Printf(format string,  args  ...interface{}) {

 

  func  MyPrint ( args  ...interface {} ) {

    for  _, arg  :=  range  args {

      switch   arg.(type)  {

        case  int:

        case  string:

        default:

      }

    }

  }

 

23. 多返回值

  携带 Error

  _ : 忽略返回值

 

24. 匿名函数

  f := func (  a, b  int,  z  float64)  bool { 

  }

 

  func  ( ch  chan  int)  {

    ch <- ACK

  }( reply_chan)

 

25. 闭包

  func   main() { 

    var j  int  = 5

    a :=  func( ) ( func() ) {  // 参数为空,返回值为一个函数

      var  i  int  = 10

      return  fun()  {

      } ()

    }

 

    a ()

    j *= 2

    a ()

 

26. errno

 

27.  defer  fun ()  { // 做复杂的清理工作

    // 无论怎样都会被调用

 

28.  panic ()    recover()

  panic () 立即终止,返回调用 , defer 会被调用

  recover()  处理 panic 异常

    defer  func() {

      if   r := recover(); r != nil {

        log.Printf("Return : %v", r)

      } ( )

    }

 

29. flag 包   : 命令行参数解析

  X = flag.String(" ... ")

  flag.Parse()    // 在 main 里调用, 参数解析到的值到  X 里

  

30. file, err  := os.Open(  )

  defer  file.Close()

  values = make( []int, 0)

  for  {

    line, isPrefix, err1 := br.ReadLine()

      err1 != nil;  err1 != io.EOF

  }

  str := string(line)

  value, err1 := strconv.Atoi(str)

  if err1 != nil ...

    values = append(values, value)

 

31. func  writeValues( values  [] int,  outfile  string)

  file, err  := os.Create( outfile )

  str := strconv.Itoa( value)

 

32. file, err := os.Open(infile)

  defer  file.Close()

  br := bufio.NewReader(file)

  line, isPrefix, err1 := br.ReadLine()

      err1 != nil, err1 != io.EOF

  t1 := time.Now()

 

[学] GO 语言学习笔记(一)