zoukankan      html  css  js  c++  java
  • 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主要分配引用类型

    处理异常:

  • 相关阅读:
    常用模块介绍
    正则表达式/re模块
    模块简介/模块的导入/模块的查找顺序/绝对导入和相对导入/软件开发目录规范
    迭代器/for循环本质/生成器/常用内置方法
    函数递归/二分法/列表,字典生成式/三元表达式/匿名函数/内置函数
    闭包函数/装饰器
    函数对象/函数的嵌套定义与调用/名称空间和作用域
    初识函数
    文件处理/光标移动/实时检测
    7-5字符编码和文件处理
  • 原文地址:https://www.cnblogs.com/juanjuanduang/p/11361045.html
Copyright © 2011-2022 走看看