欢迎光临
感谢一路有你

go学习笔记1

如果你对该文章中的内容有疑问/不解,可以点击此处链接提问
要注明问题和此文章链接地址 点击此处跳转
 

hello GO

这里使用vscode

  1. 安装插件go

  2. 新建hello文件夹,创建main.go文件

    1. 打开命令行

      image-20200827134240655

  3. 执行go build 这时同目录会创建一个hello.exe的文件(我这里使用的是win电脑)

    也可以使用 go build -o aaa.exe 指定文件名

也直接输出可使用 go run main.go

跨平台编译

只需要指定目标操作系统的平台和处理器架构即可:

然后再执行go build命令,得到的就是能够在Linux平台运行的可执行文件了。

Mac 下编译 Linux 和 Windows平台 64位 可执行程序:

Linux 下编译 Mac 和 Windows 平台64位可执行程序:

Windows下编译Mac平台64位可执行程序:

基础

//单行注释

/*

多行注释

*/

fmt.Println(‘打印输出’)

一行代码不需加分号

变量声明后必须使用,不使用会报错

缩进没有严格要求

变量和常量

标书与关键字

Go语言中标识符由字母数字和_(下划线)组成,并且只能以字母和_开头。

关键词

25个关键词

37个保留词

变量

声明: var 变量名 变量类型

变量初始化: var 变量名 类型 = 表达式

短变量声明(声明并初始化) :=

匿名变量:用一个下划线_表示

匿名变量不占用命名空间,不会分配内存,所以匿名变量之间不存在重复声明。 (在Lua等编程语言里,匿名变量也被叫做哑元变量。)

注意:

函数外的每个语句都必须以关键字开始(var、const、func等)

:=不能使用在函数外。

_多用于占位,表示忽略值。

常量const

const a = 'dsadasd'

和变量类似

iota : go语言的常量计数器

iota在const关键字出现时将被重置为0

iota声明中间插队

多个iota定义在一行

数据类型

整型

Go语言中有丰富的数据类型,除了基本的整型、浮点型、布尔型、字符串外,还有数组、切片、结构体、函数、map、通道(channel)等。

类型 描述
uint8 无符号 8位整型 (0 到 255)
uint16 无符号 16位整型 (0 到 65535)
uint32 无符号 32位整型 (0 到 4294967295)
uint64 无符号 64位整型 (0 到 18446744073709551615)
int8 有符号 8位整型 (-128 到 127)
int16 有符号 16位整型 (-32768 到 32767)
int32 有符号 32位整型 (-2147483648 到 2147483647)
int64 有符号 64位整型 (-9223372036854775808 到 9223372036854775807)

特殊整型

类型 描述
uint 32位操作系统上就是uint32,64位操作系统上就是uint64
int 32位操作系统上就是int32,64位操作系统上就是int64
uintptr 无符号整型,用于存放一个指针

进制

浮点型

Go语言支持两种浮点型数:float32float64

复数

complex64和complex128

复数有实部和虚部,complex64的实部和虚部为32位,complex128的实部和虚部为64位。

布尔值

Go语言中以bool类型进行声明布尔型数据,布尔型数据只有true(真)false(假)两个值。

注意:

  1. 布尔类型变量的默认值为false
  2. Go 语言中不允许将整型强制转换为布尔型.
  3. 布尔型无法参与数值运算,也无法与其他类型进行转换。

字符串

字符串转义符

转义符 含义
\r 回车符(返回行首)
\n 换行符(直接跳到下一行的同列位置)
\t 制表符
\' 单引号
\" 双引号
\\ 反斜杠

多行字符串 使用反引号

字符串的常用操作

方法 介绍
len(str) 求长度
+或fmt.Sprintf 拼接字符串
strings.Split 分割
strings.contains 判断是否包含
strings.HasPrefix,strings.HasSuffix 前缀/后缀判断
strings.Index(),strings.LastIndex() 子串出现的位置
strings.Join(a[]string, sep string) join操作

byte和rune类型

字符用单引号(’)包裹起来

  1. nt8类型,或者叫 byte 型,代表了ASCII码的一个字符。
  2. rune类型,代表一个 UTF-8字符

当需要处理中文、日文或者其他复合字符时,则需要用到rune类型。rune类型实际是一个int32

修改字符串

要修改字符串,需要先将其转换成[]rune[]byte,完成后再转换为string。无论哪种转换,都会重新分配内存,并复制字节数组。

类型转换

强制转换

运算符

  1. 算术运算符 + - * / %

  2. 关系运算符 == != > >= < <=

  3. 逻辑运算符&& || !

  4. 位运算符

运算符 描述
& 参与运算的两数各对应的二进位相与。 (两位均为1才为1)
| 参与运算的两数各对应的二进位相或。 (两位有一个为1就为1)
^ 参与运算的两数各对应的二进位相异或,当两对应的二进位相异时,结果为1。 (两位不一样则为1)
<< 左移n位就是乘以2的n次方。 “a<<b”是把a的各二进位全部左移b位,高位丢弃,低位补0。
>> 右移n位就是除以2的n次方。 “a>>b”是把a的各二进位全部右移b位。
  1. 赋值运算符= += -= *= /= %= <<= >>= &= |= ^=

流程控制

ifelse

for

for range(键值循环)

switch case

fallthrough语法可以执行满足条件的case的下一个case,是为了兼容C语言中的case设计的。

goto

通过标签进行代码间的无条件跳转

break(跳出循环)

break语句可以结束forswitchselect的代码块。

continue(继续下次循环)

数组

数组定义

var 数组变量名 [元素数量]T

一旦定义,长度不能变

初始化

数组遍历

多维数组

多维数组只有第一层可以使用...来让编译器推导数组长度。例如:

数组是值类型

数组是值类型,赋值和传参会复制整个数组。因此改变副本的值,不会改变本身的值。

注意:

  1. 数组支持 “==“、”!=” 操作符,因为内存总是被初始化过的。
  2. [n]*T表示指针数组,*[n]T表示数组指针 。

切片

一个拥有相同类型元素的可变长度的序列

定义

var name []T

长度/容量

通过使用内置的len()函数求长度,使用内置的cap()函数求切片的容量

使用make()函数创建构造切片

判断切片是否为空

请始终使用len(s) == 0来判断,而不应该使用s == nil来判断。

切片不能直接比较
切片赋值拷贝

切片遍历

遍历方式和数组是一致的

append

var声明的零值切片可以在append()函数直接使用,无需初始化。

追加切片

copy

删除元素

没有删除切片元素的专用方法,我们可以使用切片本身的特性来删除元素

从切片a中删除索引为index的元素,操作方法是a = append(a[:index], a[index+1:]...)

map

map定义

map类型的变量默认初始值为nil,需要使用make()函数来分配内存。语法为:

基本使用

判断某个键是否存在

map遍历

遍历map时的元素顺序与添加键值对的顺序无关。

delete

按照指定顺序遍历map

元素为map类型的切片

值为切片类型的map

赞(3) 打赏
未经允许不得转载:王明昌博客 » go学习笔记1
分享到: 更多 (0)

相关推荐

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏