• GOPATH: 就是 golang 工作目录:我们的所有项目的源码都这个目录下。

  • 浮点数=符号位+指数位+尾数位
  • Golang 中没有专门的字符类型,如果要存储单个 字符(字母),一般使用 byte  来保存。
  • 对于传统的字符串是由字符组成的,而 Go  的字符串不同,它是由 字节组成的。
  • Go 语 言 的 字 符 使 用 UTF-8 编 码
  • 可以直接给某个变量赋一个数字,然后按格式化输出时%c,会输出该数字对应的 unicode 字符
  • 字符串一旦赋值了,字符串就不能修改了:在 Go 中字符串是不可变的。
  • 字符串的表示方式,可以使用反引号。 那么久会以字符串的原生形式输出,包括换行和特殊字符,可以实现防止攻击、输出源代码等效果
  • 如果变量名、函数名、常量名首字母大写,则可以被其他的包访问;如果首字母小写,则只能在本包中使用 ( 注:可以简单的理解成, 首字母大写是公开的, 首字母小写是私有的)
  • Golang 的自增自减只能当做一个独立语言使用,a = a++是不正确的。并且没有前置++和前置 --。
  • go原因的switch语言,匹配项后面也不需要再加 break。case 后的表达式可以有多个,使用 逗号间隔
  • case 后的各个表达式的值的数据类型,必须和 switch 的表达式数据类型一致
  • case 后面可以带多个表达式,使用逗号间隔。
  • case 后面的表达式如果是常量值(字面量),则要求不能重复
  • 如果在 case 语句块后增加 fallthrough ,则会继续执行下一个 case,也叫 switch 穿透
  • 循环语句for 可以是只有循环判断条件,或者可以什么都没有,需要break才可以退出循环
  • break 语句出现在多层嵌套的语句块中时,可以 通过标签指明要终止的是哪一层语句块
  • continue 语句用于 结束本次循环,继续执行下一次循环,可以通过标签指明要跳过的是哪一层循环。
  • 如果包名较长,Go 支持给包取别名, 注意细节:取别名后,原来的包名就不能使用了
  • 执行一个函数时,就创建一个新的受保护的独立空间(新函数栈)
  • Go 函数不支持函数重载
  • 在 Go 中, 函数也是一种数据类型,可以赋值给一个变量,则该变量就是一个函数类型的变量了。通过该变量可以实现对函数调用
  • 函数既然是一种数据类型,因此在 Go 中,函数可以作为形参,并且调用
  • Go 支持自定义数据类型。例如:type MyInt int
  • 如果一个函数的形参列表中有可变参数,则可变参数需要放在形参列表最后。
  • go语言文件执行的流程:全局变量定义 -> init函数 -> main  函数。如果main包引用了别的包,那么就先执行别的包中的全局变量定义、init函数,在执行main包中的。
  • 匿名函数没有名字。可以赋给一个变量,那这个变量就是函数变量。如果赋给全局变量,就变成了全局匿名函数。
  • 闭包返回的是一个匿名函数, 但是这个匿名函数引用到函数外的 n ,因此这个匿名函数就和 n 形成一个整体,构成闭包
  • 当 go 执行到一个 defer 时,不会立即执行 defer 后的语句,而是将 defer 后的语句压入到一个栈,然后继续执行函数下一个语句。当函数执行完毕后,在从 defer 栈中,依次从栈顶取出语句执行。在 defer 将语句放入到栈时,也会将相关的值拷贝同时入栈。
  • 函数的值传递、和引用传递
  • 值类型:基本数据类型 int 系列, float 系列, bool, string 、数组和结构体 struct
  • 引用类型:指针、slice 切片、map、管道 chan、interface 等都是引用类型
  • 数组是多个相同类型数据的组合,一个数组一旦声明/定义了,其长度是固定的, 不能动态变化
  • make的使用:var 切片名 [ ] type = make([ ]type,len,[cap])
  • 使用append内置函数,可以使用对切片的动态增长
  • map 在使用前一定要 make。a = make(map[string]string,10)
  • map 的 key 是不能重复,如果重复了,则以最后这个 key-value 为准
  • 使用delete函数对map进行删除
  • golang 中的 map 默认是无序的,注意也不是按照添加的顺序存放的,每次遍历,输出可能不同
  • map 会自动扩容,并不会发生 panic,也就是说 map 能动态的增长
  • struct 的每个字段上,可以写上一个 tag, 该 tag 可以通过反射机制获取,常见的使用场景就是 序列化和反序列化。
  • go语言的方法:func (p Person) test(str string) string { }
  • 结构体类型是值类型,在方法调用中,遵守值类型的传递机制,是值拷贝传递方式,如果想在方法中修改结构体变量的值,那就传结构体指针。
  • Golang 中的方法作用在指定的数据类型上的(即:和指定的数据类型绑定),因此自定义类型,都可以有方法,而不仅仅是 struct, 比如 int , float32 等都可以有方法。基本类型需要自定义才能有方法
  • 如果一个类型实现了 String()这个方法,那么 fmt.Println 默认会调用这个变量的 String()进行输出。func (p Person) String ( ) string { }
  • 在 Golang 中,如果一个 struct 嵌套了另一个匿名结构体,那么这个结构体可以直接访问匿名结构体的字段和方法,从而实现了继承特性。
  • 结构体可以 使用嵌套匿名结构体所有的字段和方法,小写的也可以
  • 当 结构体和 匿名结构体有相同的字段或者方法时, 编译器采用就近访问原则访问,如希望访问匿名结构体的字段和方法,可以通过匿名结构体名来区分
  • 如果一个 struct 嵌套了一个有名结构体,这种模式就是 组合,如果是组合关系,那么在访问组合的结构体的字段或方法时,必须带上结构体的名字
  • 多态的条件,要实现接口中的所有方法
  • interface 类型可以定义一组方法,但不需要实现。并且 interface 不能包含任何变量。到某个自定义类型(比如结构体 Phone)要使用的时候,在根据具体情况把这些方法写出来(实现)。
  • Golang 中的接口, 不需要 显式的实现。只要一个变量,含有接口类型中的所有方法,那么这个变量就实现这个接口
  • 接口本身 不能创建实例,但是 可以指向一个实现了该接口的自定义类型的变量
  • 一个自定义类型可以实现多个接口。Golang 接口中不能有任何变量
  • 一个接口(比如 A 接口)可以继承多个别的接口(比如 B,C 接口),这时如果要实现 A 接口,也必须将 B,C 接口的方法也全部实现
  • interface 类型默认是一个指针(引用类型),如果没有对 interface 初始化就使用,那么会输出 nil
  • 当 A 结构体继承了 B 结构体,那么 A 结构就自动的继承了 B 结构体的字段和方法,并且可以直接使用。当 A 结构体需要扩展功能,同时不希望去破坏继承关系,则可以去实现某个接口即可,因此我们可以认为:实现接口是对继承机制的补充.。
  • 继承的价值主要在于:解决代码的 复用性和可维护性。接口的价值主要在于: 设计好各种规范(方法),让其它自定义类型去实现这些方法。
  • 类型断言,由于接口是一般类型,不知道具体类型,如果要转成具体类型,就需要使用类型断言
  • json操作: json.Marshal() 和  json.Unmarshal([]byte(str), &a)
  • 主线程是一个物理线程,直接作用在 cpu 上的。是重量级的,非常耗费 cpu 资源。协程从主线程开启的,是轻量级的线程,是逻辑态。对资源消耗相对小。
  • Golang 的协程机制是重要的特点,可以轻松的 开启上万个协程。其它编程语言的并发机制是一般基于线程的,开启过多的线程,资源耗费大,这里就突显 Golang 在并发上的优势了
  • channel 中只能存放指定的数据类型,有容量限制。在没有使用协程的情况下,如果对空的channel取数据,会报dead lock 错误
  • 当管道中放 interface{} 的时候,可以放任意类型的数据。但是放入的结构体,想拿到结构体中变量时,应该进行断言。
  • 使用内置函数 close 可以关闭 channel, 当 channel 关闭后,就不能再向 channel 写数据了,但是仍然可以从该 channel 读取数据
  • channel 支持 for–range 的方式进行遍历。在遍历时,如果 channel 没有关闭,则回出现 deadlock 的错误。如果 channel 已经关闭,则会正常遍历数据,遍历完后,就会退出遍历
  • var chan1 chan<- int 声明为只写。var chan1 ->chan int 声明为只读
  • 使用 select 可以解决从管道取数据的阻塞问题。可以监听多个管道
  • goroutine 中使用 recover,解决协程中出现 panic,导致程序崩溃问题
  • 进程和线程是操作系统来调度的,协程是由编译器来调度的。所有的协程调度只有go编译器调度的最好,因此说go是天生的高并发。

go语言语法自我总结相关推荐

  1. c语言系统关键字6,C语言语法之关键字

    由ANSI标准定义的C语言关键字共32个: auto double int struct break else long switch case enum register typedef char ...

  2. JScript多语言语法加亮引擎显示(代码精简)

    上一篇文章<JScript中正则表达式用法详解>中讲解了JScript中怎样使用正则表达式,这篇文章就给出一个实际应用的例子.昨晚我一边研究JScript中正则表达式的使用就一边在做JSc ...

  3. Neo4j-Cypher语言语法

    为什么80%的码农都做不了架构师?>>>    Neo4j-Cypher语言语法 本文是记录Neo4j图数据库中实用的Cypher语言语法. Cypher是什么 "Cyph ...

  4. 下列符合c语言语法的字符常量是,C语言程序设计(周经亚)选择题练习-chapter 5.doc...

    选择题练习一 下叙述中正确的是 [1] . A)在C程序中,main函数必须位于程序的最前面 B)C程序的每行中只能写一条语句 C)C语言本身没有输入输出语句 D)在对一个C程序进行编译的过程中,可发 ...

  5. java语言语法--- Java标识符(标识符命名规则)、Java关键字、Java变量(变量的声明、赋值、使用)和常量(字符常量、字面常量)(包括Java字节码文件反汇编命令javap)

    java语言语法- Java标识符.Java关键字.Java变量和常量(包括Java字节码文件反汇编命令javap) 1.标识符 (1)读音:biao zhi fu (2)什么是标识符? (摘自百度百 ...

  6. c语言语法格式规范(1)常量的非法与合法

    c语言语法格式规范(1)常量的非法与合法 首先确定常量的类型 整型 确定进制,查看各位数的范围是否超界. 8进制常量以前导 0 开始,每位数只能到7 例如:05188 非法 16进制常量以 0x 开始 ...

  7. c语言中建一个文件的语法,C语言语法介绍_文件.ppt

    C语言语法介绍_文件 第十三章 本章要点 文件的基本概念 文件的基本函数 文件的顺序读写 文件的随机读写 文件简单应用 主要内容 13.1 C文件概述 13.2 文件类型指针 13.3 文件的打开与关 ...

  8. JScript多语言语法加亮引擎改进(修正多行注释识别)

    原先多行注释识别的正则/\*.*?\*/不能正常识别,现在修正为:/\*[.\b\w\W]*\*/          呵呵,简直乱写,反正可以用了就是.         其次行识别现在还没有真正起作用 ...

  9. drl 规则语言 语法_C语言基本语法规则

    drl 规则语言 语法 C language syntax specify rules for sequence of characters to be written in C language. ...

  10. Python语言语法描述规范BNF介绍

    Python语言语法描述规范BNF介绍 读官方的 Python 语言参考(The Python Language Reference)需要了解BNF. BNF(Backus Normal Form:巴 ...

最新文章

  1. 【天命奇御】成就进度62/71的通关攻略(1·开篇前言)
  2. 算法分析与设计——蛮力法0/1背包
  3. 以回调形式使用startActivityForResult方法,并解决Activity被回收的问题
  4. java可以使用c语言中的输入,c语言中的scanf在java中应该怎么表达,Scanner类。
  5. 本地启动 SAP Commerce Cloud(Hybris) 产生的五个 Java 进程
  6. 技术停滞_检测和测试停滞的流– RxJava常见问题解答
  7. linux中的fbset工具,Fluxbox (简体中文)
  8. dll文件懒加载_前端性能优化
  9. visjs使用小记-2.option参数注释说明
  10. 第 24 章 状态模式
  11. Python在定义类方法时self的作用是什么?是否可以不写
  12. vivo电池损耗指令代码_安川伺服驱动器维修中常用故障代码
  13. 疯狂java讲义第二章课后习题答案
  14. 商城开发-用户管理模块(2)
  15. 进销存系统的成本核算方法一览
  16. 访问计算机需要用户名密码,访问局域网电脑提示需要用户名和密码该怎么办
  17. c++ 字符串分割和数字格式化输出
  18. 009 二维随机变量分布 min max 习题
  19. 心理健康咨询问卷数据集
  20. 王者荣耀-是用什么编程语言开发的

热门文章

  1. python开发wince_零基础学习WinCE开发
  2. java实现用户分组,java实现分组算法,根据每组多少人来进行分组
  3. Windows10:将cmd命令行添加到右键中的方法
  4. 反射相关知识及jOOR反射库介绍
  5. HashMap内部存储实现及HashTable比较
  6. 推荐一个超干货的计算机视觉社区!
  7. 机器学习中的偏差和方差理解
  8. (洛谷)P1182 数列分段II
  9. 辗转相除法 两个数的最大公约数
  10. sudo su 和sudo -s的区别