优点

  • 内存自动回收;只需要new分配内存,不需要释放;gc垃圾回收
  • goroute,轻量级线程;从语言层面支持并发;
  • 管道;多个goroute之间通过channel进行通信;支持任何类型
  • 多返回值

基本格式

第一个程序
package main

import(
	"fmt"
)

func main(){
    fmt.Println("hello world")
}
函数例子
func Add(a int,b int)int{
    return a+b
}
//func 函数名(参数值 参数类型,...) 函数返回值类型{}

知识小结

  1. 每个程序只有一个main包

  2. 所有go源码以.go结尾

  3. 标识符以字母或下划线开头,大小写敏感

  4. _(下划线)是特殊标识符,用来忽略结果。

  5. 关键字

    • var和const:变量和常量的声明

    • go:用于执行

    • defer:在函数退出之前执行 ;后进先出的方式执行

    • fallthrough:go语言的switch case函数中的break是已经存在的,但不显示出来

      加了fallthrough,会直接运行下一个case或default语句,不论条件是否满足

      a:=8
      switch{
          case a < 3:
      		fmt.Println("小于3")
      	case a < 10:
      		fmt.Println("小于10")
      		fallthrough
      		// fmt.Println("值为8")
      	default:
      		fmt.Println("默认")
      }
      //若不加fallthrough,运行结果是 小于10
      //加了fallthrough,运行结果是  小于10
      //                          默认
      //在fallthrough语句后再写语句会报错
      
    • type:用于声明自定义类型

    • range:用于读取slice、map、channel数据

  6. 包访问控制规则:

    • 大写意味着这个函数/变量是公有的
    • 小写意味着这个函数/变量是私有的,包外部不能访问
  7. go语言不存在隐式转换。(高转低会丢失精确度)

  8. 不支持重载;函数也可以赋值给变量

  9. 可变参数

    func add(a int,b int,arg...int)int{}
    //2个或多个参数
    
  10. cap容量

    • 切片赋值时,slice的cap容量只是和开始索引有关系

      cap=引用对象的cap - 开始索引

    • slice扩容时,容量会变成之前cap的两倍

      扩容之后的slice,引用的已经不是原先的那个数组了