类型转换和类型断言

类型转换语法:Type(expression)

类型断言语法为:expression.(Type)

1.类型转换示例代码

打印结果

2.类型断言代码示例

注意:对于类型断言,expression 必须是接口类型

运行结果

全局变量

定义全局变量必须用var,全局变量要定义在函数之外,而在函数之外定义的变量只能用var定义。

全局变量使用var,编译通过

全局变量不使用var,编译不通过

init函数

这是官方对于init()函数的介绍:

变量除了可以在全局声明中初始化,也可以在 init ()函数中初始化。这是一类非常特殊的函数,它不能够被人为调用,而是在每个包完成初始化后自动执行,并且执行优先级比 main 函数高。 初始化总是以单线程执行,并且按照包的依赖关系顺序执行。 一个可能的用途是在开始执行程序之前对数据进行检验或修复,以保证程序状态的正确性。

如何觉得上面这一大段话不好理解的话,可以看我的总结:

  • init函数可以在任何包中有0个、1个或多个;
  • main函数只能在main包中有且只有一个,但是main包中也可以有0个、1个或多个init函数;
  • init函数和main函数都不能被显式调用;

Go语言中变量、init函数、main函数的执行顺序

  • 首先初始化导入包的变量和常量
  • 然后执行导入包的init函数
  • 然后初始化本包的变量和常量
  • 然后执行本包的init函数
  • 最后执行本包的main函数

Go接口总结

这是我在刷题的时候碰到的,总结出来给大家:

  • 如果两个接口拥有相同方法列表(顺序可以不一致),那么这两个接口实质上同一个接口
  • 接口A是接口B的子集,意味着A的方法B中都有,那么A是B的基类,所以A=B是可行的
  • 接口是否能够调用成功,需要运行的时候才能知道
  • 接口赋值是否可行,在编译阶段就可以知道

Go字符串

Go语言中的字符串不支持下标操作

在go语言中,字符串是一种基本类型,和其它开发语言不同,Go的字符串是由单个字节连接起来的。

Go语言统一使用utf-8编码标识Unicode文本。当字符为ASCII编码时,占用1个字节,其它字符占用2到4个字节,中文占用3个字节

如何修改字符串的内容

有三种方法:

stringsReplace()

示例代码

运行结果

slice

slice可以通过append方式实现元素的删除。

**切片使用冒号分隔时遵循"前闭后开"原则,即包括前面的值,不包括后面的值。 **

1.删除单个元素

运行结果

2.删除多个元素

运行结果

总结

这篇文章汇总了我再开发和刷面试题过程中遇到的容易搞错的知识点,包括:

  • 类型转换和类型断言的对比
  • 定义全局变量只能用var,定义全局变量也可以定义在init()函数中
  • init()函数的知识点,以及init函数和main函数的执行顺序:先执行引用包的常量和变量、在执行引用包的init函数、再执行本包的常量和变量、再执行本包的init函数、最后才会执行本包的main函数。
  • Go接口的概念总结,刷面试题的时候可能碰到咬文嚼字的问题,注意避坑。
  • Go字符串不能通过下标直接修改内容,但是可以通过转成byte[]/rune[]/以及使用原生包strings中的Replace()方法修改内容
  • Go中的slice不能像map一样直接使用delete()方法删除元素,可以使用append()方法+冒号分隔切片的方式,间接实现切片元素的删除。