教程集 www.jiaochengji.com
教程集 >  Golang编程  >  golang教程  >  正文 go语言语法自我总结

go语言语法自我总结

发布时间:2021-05-20   编辑:jiaochengji.com
教程集为您提供go语言语法自我总结等资源,欢迎您收藏本站,我们将为您提供最新的go语言语法自我总结资源
  • 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语言语法自我总结”的文章就介绍到这了,更多文章或继续浏览下面的相关文章,希望大家以后多多支持JQ教程网!

您可能感兴趣的文章:
想系统学习GO语言(Golang
Golang学习笔记(五):Go语言与C语言的区别
Go语言的主要特性和发展影响
从零开始学习GO语言-搭建Go语言开发环境-快速开发入门第一个小程序
go run main.go 参数_Go语言入门:Hello world
Go 语言到底适合干什么?
查看go 安装了哪些包_go语言基础入门(一)
[GO语言基础] 一.为什么我要学习Golang以及GO语言入门普及
初识 Go 语言
Go 语言十年而立,Go2 蓄势待发

[关闭]
~ ~