前言
配置好go之后可以通过go env
或env
来查看环境变量是否设置正确
Go目录结构($GOROOT):
/bin
可执行文件,如:编译器、Go工具/doc
示例文件/lib
文档模板/misc
Go编译器的相关配置和cgo的示例/os_arch
标准库的包的对象文件(.a)/src
源码/src/cmd
Go和C的编译器的命令行脚本
调试
-
gdb
-
活用print/println
-
fmt.Printf
- %+v 打印包括字段内的实例的完整信息
- %#v 打印包括字段和限定类型的所有信息
- %T 打印某个类型的完整说明
-
panic获取栈内信息
-
defer跟踪执行过程
格式化
go fmt
自动格式化go,不再需要把太多精力放在代码风格中,而且可读性更加好。(代码是给人看的)
api文档查询
https://gowalker.org
main
go的main函数既没有参数也没有返回类型,如果添加了参数或者是返回类型则会报错:
func main must have no arguments and no return values results.
结构
- 在完成包的 import 之后,开始对常量、变量和类型的定义或声明。
- 如果存在 init 函数的话,则对该函数进行定义(这是一个特殊的函数,每个含有该函数的包都会首先执行这个函数)。
- 如果当前包是 main 包,则定义 main 函数。
- 然后定义其余的函数,首先是类型的方法,接着是按照 main 函数中先后调用的顺序来定义相关函数,如果有很多函数,则可以按照字母顺序来进行排序。
常量
关键字const
变量
当一个变量被声明之后,系统自动赋予它该类型的零值:int 为 0,float 为 0.0,bool 为 false,string 为空字符串,指针为 nil。记住,所有的内存在 Go 中都是经过初始化的。
局部变量的初始化声明的首选形式 :=
可以写成这种形式
a := 1
b := false
不能对相同名称的变量使用初始化声明,不过可以使用=
逻辑运算符
!
&&
||
在 Go 语言中,&& 和 || 是具有快捷性质的运算符,当运算符左边表达式的值已经能够决定整个表达式的值的时候(&& 左边的值为 false,|| 左边的值为 true),运算符右边的表达式将不会被执行。利用这个性质,如果你有多个条件判断,应当将计算过程较为复杂的表达式放在运算符的右侧以减少不必要的运算。
对于布尔值的好的命名能够很好地提升代码的可读性,例如以 is
或者 Is
开头的 isSorted
、isFinished
、isVisible
,使用这样的命名能够在阅读代码的获得阅读正常语句一样的良好体验,例如标准库中的 unicode.IsDigit(ch)
数字类型
问题4.1 : int和int64不是相同类型,int的长度和系统有关。官方解释:int is a signed integer type that is at least 32 bits in size. It is a distinct type, however, and not an alias for, say, int32.
字符类型
byte是uint8的别名
字符串
相当于定长的数组
拼接字符串
+
号strings.Join()
bytes.Bufferr
指针
go中不能获取常量的地址。
*
号的所有用法:
- 乘法
- 定义指针类型
- 反向引用