Go语言学习入门-1

GoLang 学习

2022-01-22
学习一门新技术:
基本原理 基本语法
入门案例 知识点基本使用
怎么使用更规范 使用陷阱
GoLang概述 程序。1.9.2 GO。
Go 特点
静态编译。动态开发效率。
Go 文件都要属于一个包 不可单独存在。
垃圾回收 天然并发。管道通信机制
函数返回多个值 切片slice defer 延时执行。
配置GOROOT GOPATH 工作目录和PATH
shift+ALT+向下 :复制代码 VSCODE 快捷键。
Go 语言会在每行后自动加分号。
定义的变量或者包没有用到,编译不通过。
转义字符
\t \n \ " \r
shift + tab 整体向左移动。
gofmt -w ~.go 格式化并写入  运算符两边加空格。
DOS 指令。
Go
变量
变量赋值

// 指定变量类型 若声明后不赋值,使用默认值
	var i int
	// 根据值 自行判断 变量类型
	var j=9.9
	//省略var 注意: := 左侧 的变量不应该是已经声明过的 否则会编译错误
	k:=10
	fmt.Println("i=",i)
	fmt.Println("j=",j)
	fmt.Println("k=",k)

多变量声明。

n1,name,n3 :=100,"tom",888
	var (
		n4 =100
		n5 ="nice"
	)

变量 =变量值+ 类型+命名
Go 中 + 加法 ,字符串拼接
Go 没有char 用byte保存。由字节组成。
Go 语言字符用的是UTF-8 编码 英文字母1字节 汉字3 字节。
布尔类型 一个字节。
字符串类型
字符串是不可变的
利用双引号 / 利用反引号。输出复杂的字符串
字符串拼接:
字符串+字符串
Go 中 不同类型变量之间赋值需要显式转换 不能自动转换。T(v) 把v转为T类型。
转换后 原本值没有发生变化。 转换需要考虑范围。
int32–> int8 报错 int32–> int64 依旧报错。需要做强转。
如果没有用到一个包,又不想删掉,前面加一个_ 表示忽略。
基本数据类型和String相互转换。
fmt.Sprintf 格式化字符串。
strconv 包函数
ParseBool String 转为基本数据类型。
如果没有转成功 就变成默认值。

指针及其内存布局。

值类型都有对应的指针类型。
值类型包括:基本数据类型 int float bool string 数组和结构体struct
引用类型 指针 切片slice map 管道chan iterface
值类型:
变量直接存储值 内存通常是在栈中分配
引用类型变量存储的是一个地址 这个地址对应的空间才是真正存储数据(值)内存通常在堆上分配 当没有任何引用变量来引用这个地址时 该地址对应的数据空间就成为了一个垃圾,由GC来回收。

标识符的规范

1.26个英文字母 大小写 0-9 _组成
2.不可以数字开头
3.严格区分大小写
4.不能包含空格
5. 不能以保留字为标识符 25个
6. 下划线仅能作为占位符使用 不能作为标识符使用。
int 和float32 可以用但不推荐。

变量名 常量名 函数名 尽量采用驼峰命名法。
首字母大写 可以被其他包访问 首字母小写则是私有的。没有public private 关键字

预定义标识符
基础数据类型+内嵌函数
运算符
算术运算符
赋值运算符
比较运算符
逻辑运算符
位~
其他~
Go 中 取消三元运算符。
取模:a%b =a-a/b*b
a++ a-- 只能作为独立语言使用 不可再赋值 b:=a++ a++>0 不合法。
只有a++ a-- 没有–a ++a
关系运算符的使用> < ==
逻辑运算符 & | !
短路 && 短路 ||
赋值运算符:= += -=

运算符优先级
其他运算符
位运算符 和移位运算符
指针 取地址运算符。
提倡的一种代码实现 只有一种方式。
// 获取用户终端的输出
fmt.Scanln. Scanf

二进制

原码 反码 和补码 计算机运行是用补码 进行运算。
按位与 按位或 按位异或
移位运算 右移 低位溢出符号位不变 并用符号位补溢出的高位
左移 符号为不变 低位补0

流程控制

流程控制 嵌套分支不易过多。最多三层
Switch 分之结构
case 后表达式可以有多个 不需要break 默认有break。
case 后 是一个表达式 即常量值 变量 一个有返回值的函数都可以
case 后表达式的值的数据类型 必须和switch的表达式的数据类型一致。
case 后可以带多个表达式 使用逗号间隔
表达式如果是常量值【字面量】要求不能重复
不带break 执行完一个就退出 一个匹配不到 default
default 不是必须的。
switch 后 可不带表达式 类似 if else
switch穿透 fall through 继续执行下一个case
# Type Switch 用来判断某个interface 变量中实际指向的变量类型。
switch 和 if的比较
判断的具体值不多 而且符合 整数浮点数 字符字符串等几种类型 建议switch
其他情况 对区间和结果为Bool类型的判断 if使用的范围更广。

循环控制

for 循环
循环变量初始化
循环条件
循环体
循环变量迭代。
for range 按照字符的方式遍历。传统方式遍历是按照字节遍历,一个汉字对应3个字节。
str 转成 []rune 切片。

while /do while go 中是没有 这种语法的。
多重循环
控制跳转:brak
break 中断for 循环或跳出switch 语句
break 可以跳出最近的for 循环。
break 后面可以指定标签 跳出标签对应的for 循环。
continue 结束本次循环继续下次循环。
Goto return / return 终止main函数。

函数

函数包 错误处理
自定义函数
系统函数。
func 函数名(形参列表)(返回值列表){
执行语句
return 返回值列表
}
包的引出。
Go 是以包的形式管理文件。
引入包是从 GoPath/src 下面开始引入
可以起别名。 引用变量和函数
util “///utils”

**函数调用底层剖析**

递归调用
函数细节 和注意事项
基本数据类型 和数组都是值传递 即进行值拷贝 在函数内修改 不会影响到原来的值。
如果希望函数内的变量能修改函数外的变量 默认值传递数据类型。可以传人变量地址。
Go 函数支持函数重载
函数也是一种数据类型 可以赋值给一个变量 。
Go支持自定义数据类型

	type myint int
	var num1 myint
	num1 = 40
	fmt.Println("nums1", num1)

go 认为 int 和myint 是两个类型。
Go 支持对函数返回值的命名
Go支持可变参数 args 是切片 可以访问到各个值

Go -init 函数

该函数会在main执行直接 被Go 运行框架 调用。也就是说init 会 在main函数之前调用。
完成初始化工作。
如果一个文件同时包含 全局变量定义 init 函数和main函数
执行流程 是。**变量定义----init 函数----main 函数。**

匿名函数

函数只用一次。
全局匿名函数。

闭包

函数与相关的引用环境组成的整体。
func addUpper() func(int) int {
	var n int = 101
	return func(x int) int {
		n = n + x
		return n
	}
}

闭包
匿名函数+ 变量

defer使用

在函数执行完毕后及时释放资源 defer延时机制。
defer 栈 。函数执行完毕后从defer 栈中出栈。
2022-1-31
defer 入栈时相关的值也已经入栈。后面变化不会干扰到。
defer 关闭资源

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值