go基础

变量:

字符用byte型来定义 var a byte

注意:简洁的赋值语句 := 不能在函数体外使用,常量const也不能使用 := 定义。

空标识符:

"_"  可以代表任何标识符,但它对应的值会被忽略

使用范围:

没有public private关键字,若变量名、函数名、常量名首字母大写,则可以被其他包访问,若首字母小写,则只能在本包中使用。

键盘输入:

从键盘中输入:fmt.Scanln(&a)

控制流: 

1、if后必须跟"{ }",即使只有一行代码,同样,else里的内容也是

2、switch匹配项后不需要加break,因为执行完一个case语句就自动跳出了,从上到下判断,最后只会执行一条。default也不是必须的。

switch后可加表达式:则case的匹配项不可重复

switch后也可不加表达式:判断条件写case里

在case后加上fallthrough会继续执行下一个case,也叫穿透一层case

循环:

go有一个for-range语句,可以方便地遍历数组和字符串:

传统方法:

注:传统方法遍历含有中文的字符串会报错,因为中文在utf8占3个字节,但for-range不会报错,所以推荐使用。

go里面没有while和do...while!!!都可用for来代替

while:

do...while:

 函数:

如果要调用其他包下的函数,被调用的函数名首字母大写,在import包时,路径自动从GOPATH的src下开始引入,不带src

使用调用函数的语法是:包名.函数名

在接受函数返回值时如果希望忽略某个值,用"_"

当返回值只有一个,返回值类型列表的括号可以不写

go函数不支持重载!!

函数也是一种类型,可以赋值给一个变量,变量调用函数

函数做形参时,需要把它的形参实参的返回类型都指出

自定义数据类型: type myInt int 则myInt等价于int

函数支持可变长度的形参:

init函数

每个源文件可以包含一个init函数用于初始化,可以在main函数之前,全局定义之后执行。

匿名函数

只调用一次的函数,可以不取名字,直接用变量去取结果

将匿名函数赋给全局变量,该函数就可以全局使用了。。。

 闭包:

闭包是指匿名函数和它用到的变量(或函数)组成的整体,有累加的效果。

累加器案例:

第一次看这段代码会被AddUpper()函数的输入输出搞懵,因为它好像不需要输入值那它是怎么被调用的?

解释:

这段代码里包含了两个函数,AddUpper()和一个匿名函数,匿名函数在AddUpper中被定义,并且AddUpper函数的返回值是该匿名函数。

闭包则是指这个匿名函数和它用到的函数外的n

因此累加器的调用过程是:首先定义一个变量去接匿名函数,然后对该函数变量 f 修改它的实参。

因为 f 一直是对匿名函数的操作,外部的 n 只初始化一次,每次调用匿名函数都会修改 n 值,

如果希望重新用一个累加器,则需要重新定义一个变量去接匿名函数。

整个过程也可理解为闭包是一个类的内部:定义 f 函数相当于初始化一个A类对象a,f(1) 相当于调用a.func(1)

class A{
int n =10;
int func(int x) {
     n = n + x;
   return n;
  }
}

 函数中的defer

在函数中加入defer关键字,可以先跳过这个语句,并将语句压入栈中,当函数运行到最后一句话时再出栈。

defer的价值:当函数执行完毕之后可以及时释放函数的资源。

函数参数传递方式:

 值传递和引用传递,传递给函数的都是变量的副本。区别在于值传递传递的是值的拷贝,内存在栈上分配。

引用传递传递的是地址,地址对应的空间是存储数据,内存在堆上分配。

一般来说地址拷贝效率高,因为数据量小。值拷贝基本数据类型还好,结构体数据很大,拷贝效率低。

值类型:

int、float、bool、string、数组、结构体struct

引用类型:

指针、切片slice、map、管道chan、interface

处理字符串的常用函数:

1、统计字符串长度 len(str)

2、字符串遍历,同时处理有中文的问题 r := [ ]rune(str)

将字符串定义成切片然后遍历。

3、字符串转整数 "123"-->123  (需要导入strconv包)

n,err := strconv.Atoi("123")

4、整数转字符串 123-->"123"

str = strconv.itoA(123)

 

5、查找字串是否在字符串中

strings.Contains("absad","ab") //返回true/false

6、统计字符串有几个字串

strings.Count("aaa","a") //3

还有判断前后缀,查找字串出现的的位置,字符串比较大小,进制转换等,见笔记。

此外还有统计函数执行时间的方法,见笔记。

内置函数:

new和make用来分配内存,make主要分配引用类型

处理异常:

原文地址:https://www.cnblogs.com/juanjuanduang/p/11361045.html