写在前面
1、本文主要是自己学习go视频时做的一些笔记,视频来自于bilibili的尚硅谷
传送门:尚硅谷Go语言核心编程教程全套完整版(从理论到实践),笔记中有些文字、图片引用自该视频,如有侵权,请联系本人删除
2、官方go编程指南,传送门:Go 语言之旅
3、Golang官方网站,需要翻墙,传送门:Golang官方
4、Golang标准库文档,传送门:Golang标准库文档
第一章 window下go的安装与环境配置
下载安装包
1、官方下载地址:https://golang.google.cn/dl/(实在慢,我开了翻墙还是慢)
2、我的百度网盘,地址:go1.16.6.windows-amd64 ,提取码:c8kr
安装成功后可查看版本
C:\Users\Administrator>go version
go version go1.16.6 windows/amd64
环境变量配置
注意,目录最好不要含中文,否则可能会导致编译失败
1、存放项目代码的目录:GOPATH
2、软件安装的目录:GOROOT
查看环境配置
go env
GOPATH项目目录可以放多个,用分号隔开,如F:golang;F:demo
第二章 编写第一个程序,HelloWorld
编写第一个程序
项目目录
一般语言是没有规定的项目结构,Go语言在这方面做了规定,为了保持一致性,做到统一、规则化比较明确
--demo
--bin
--pkg
--src
--project01
--project02
bin存放编译后的可执行文件
pkg存放编译后的包文件
src存放项目源文件,多个项目则分多个文件夹
编写hello.go 代码
1、go文件的后缀是 .go
2、package main
表示:该hello.go文件所在的包是main,每个文件都必须归属一个包
3、import “fmt”
表示:引入一个包,包名fmt,引入后,即可使用该包的函数,例如:fmt.Println
4、func main(){}
func 是一个关键字,表示后面是一个函数,mian代表是一个主函数,即程序的入口
编译代码
1、进入到文件目录,执行go build,执行完成后生成执行文件hello.exe,执行exe文件即可看到效果
2、go run命令可以直接执行hello.go,可以看到运行效果(在实际工作中都要先编译,再执行)
F:\golang\src\go_code\project01\main>go run hello.go
hello,world!
执行流程分析
go build、go run
1、如果先编译成可执行文件,则把执行文件拷贝到其他没有go环境的机器,也可以直接执行
2、如果是源文件,则要执行的机器上也必须有go开发环境,否则无法执行
2、下图中可以看出,源文件1KB,编译后的执行文件为2046KB,这是因为,编译时,编译器会将程序依赖运行的库文件包含在可执行文件中,所以执行文件变大了很多
编译和运行的注意事项
1、源文件可以通过编译器编译成为机器可以识别的二进制文件
2、编辑器可以编译为其他文件名的可执行文件
命令:go build -o myhello.exe hello.go
3、windows编译生成的是exe,linux编译生成的是一个可执行文件
4、编译如果出错,则会提示哪一行代码出错,可以快速定位错误
程序开发的注意事项(重点)
1、源文件后缀必须是.go
2、引用程序的执行入口是main()函数
3、语言严格区分大小写
4、语句后面不需要加分号,go语言默认语句后面都加了分号
5、编译器是一行一行编译的,一行就写一条语句,不要多条语句写在同一行
6、定义的变量或者引用的包没有被使用,则不会编译通过
三、转义字符
本章节相对简单,不做过多赘述,不明白的可以直接百度
课堂练习
答案参考:
package main
import "fmt"
func main() {
fmt.Println("姓名\t年龄\t籍贯\t住址\njohn\t12\t河北\t北京")
}
运行结果:
F:\golang\src\go_code\project01\main>go run hello.go
姓名 年龄 籍贯 住址
john 12 河北 北京
四、开发常见的问题和解决办法
1、找不到文件
2、语法错误
错误信息查看
五、代码风格
1、官方推荐使用行注释来注释代码
2、正确的缩进和空白
- 一般是4个空格,或者编辑器设置一个tab为4个空格,直接使用tab
- 可以使用gofmt命令来进行格式化
查看格式化:gofmt 文件名
格式化并保存:gofmt -w 文件名
- 运算符左右加空格
var a = 1 + 2 * 3
- 代码建议不超过80个字符,如果超过,建议换行
可以使用英文逗号,分隔开,类似其他语言的英文加号+
六、常用的dos指令
1、Dos操作基本原理
2、文件操作
- 添加内容到文件,若文件不存在则新建文件
echo 内容 > 文件名
2) 移动文件
move 源文件 目标目录
- 删除文件
del 文件名
del *.txt//删除所有txt后缀的文件
第三章、golang的变量
一、变量的概念
二、变量的使用
三、变量的介绍
变量使用的三种方式
1、指定变量的类型,声明后若不赋值,则使用默认值
var i int //整形,默认为0
i = 10
var name string //文本型,默认为空
var isCat bool //布尔值,只能是true或者false
var num float32 //32位浮点型
var num float64 //64位浮点型
数据类型详见:Go语言数据类型
2、不指定类型,程序自行判断
var num = 10
3、省略var语句,:= 左侧的变量不能是声明过得
name := "atom"
4、同时声明多个变量
var n1, n2, n3 int
var num1, num2 = 10, 20
var m1, name, m2 = 20, "tom", 30
m1, name, m2 := 20, "tom", 30
四、浮点类型
1、golang中浮点类型没有float、double,只有float32,float64,
2、float64相当于double
3、默认声明为float64
4、可以是5.12,也可以是.12
5、科学计数法,
1)5.1234e2或者5.1234E2,为5.1234 * 10的2次方,即512.34
2)5.1234e-2 即为5.1234 / 10的二次方 即为0.051234
五、字符类型(char)
六、布尔类型 bool
1、布尔类型只允许true或false
2、布尔类型占1个字节
七、字符串
1、定义字符串的方式
var name := "tom"
var name string ="tom"
2、定义了之后,字符串不可改变,可以重新赋值
var name := "hello,world"
name[0] = a //不可执行
name = "hello,golang //可执行
3、反引号的使用,可让字符串原生形式输入,包括换行,代码,特殊字符,可以防止攻击
name := `
package main
import "fmt"
func main() {
var name string = "hello"
name = "world"
fmt.Println("name=", name)
}
`
效果如下
4、字符串可以用 加号 + 拼接,加号必须在当前行的末尾,不能作为开头
package main
import "fmt"
func main() {
var str string = "hello "
str += "world"
fmt.Printf(str + "\n")
var name = "hello,world" +
"hello,java" +
"hello,golang" +
"hello,php"
fmt.Println("name=>", name)
}
打印结果
hello world
name=> hello,worldhello,javahello,golanghello,php
八、基本类型数据默认值
int 默认值 0
float32、float64 默认值 0
string 默认值 空
bool 默认值 false
package main
import "fmt"
func main() {
var age int
var num float32
var num2 float64
var str string
var isTrue bool
fmt.Println("age=>", age, "num=>", num, "num2=>", num2, "str=>", str, "isTrue=>", isTrue)
}
输出结果
age=> 0 num=> 0 num2=> 0 str=> isTrue=> false
九、数据类型的转换
1、范围转换
转换的类型可以从范围小转换范围大,也可以范围大转换范围小
package main
import "fmt"
func main() {
var i int32 = 100
var num float32 = float32(i)
fmt.Printf("i=%v num=%v", i, num)
}
执行结果
i=100 num=100
2、转换溢出
将int64转换为in8,编译时不会报错,但是结果会按溢出处理
package main
import "fmt"
func main() {
var n1 int32 = 100000
var n2 int8 = int8(n1)
fmt.Printf("i=%v num=%v", n1, n2)
}
执行结果
n1=100000 n2=-96
10、指针
1、基本数据类型,存的是变量的值,也叫值类型
2、获取变量的地址,可以用&,例如var num int = 10,num的地址可以用 &num 获取
3、指针也有对应的指针类型,形式为 *数据类型,例如int对应的指针类型就是 *int,float32对应的指针类型就是 *float32,以此类推
4、指针变量存的是一个地址,这个地址指向的空间才是存的值
比如 var ptr *n2 = &num
- ptr 是一个指针变量
- ptr 的类型 * int
- ptr 本身的值是 &num4
- 使用 *ptr 获取 ptr的值
练习题
- 写一个程序,获取一个int变量num的地址,并显示到终端
- 将num的地址赋给指针ptr,并通过ptr去修改num的值
代码如下
package main
import "fmt"
func main() {
var num int = 10
fmt.Printf("int的地址是=>%v\n", &num)
fmt.Println("num的值为", num)
var ptr *int = &num
*ptr = 20
fmt.Println("num的值为", num)
}
运行结果
int的地址是=>0xc00000e088
num的值为 10
num的值为 20
11、值类型和引用类型
1、值类型
1、基本数据类型:int32系列,float系列,string,bool,数组,结构体struct
2、通常在栈区分配
2、引用类型
1、引用类型:指针,slic切片,map,管道chan,interface
2、通常在堆区,分配空间
12、标识符
1、标识符的概念
- Golang对各种变量、方法、函数等命名时使用的字符序列称为标识符
- 能够自己命名的地方都叫标识符
2、标识符的命名规范(重点)
- 由26个英文字母、0-9、_组成
- 不能用数字作为开头
- golang中严格区分大小写
- 标识符不能包含空格
- 下划线“_”在go中是一个特殊的表示付,称为空标识符。用于占位
- 系统保留关键字不能作为标识符,如 func、break
详见:关键字 | 菜鸟教程
注意
如果变量名、函数名、常量名首字母大写,则可以被其他包访问即公开的(public),如果首字母小写,则只能在本包里面访问(private),在golang中没有public,private关键字
第四章 运算符
1、运算符介绍
1、算数运算符
一览表
注意细节:
除法运算
- 如果除数被除数都是整数,则得到的结果都是整数,去掉小数部分,保留小数部分
10 / 4 = 2
如果需要得到小数,则需要浮点数参与运算
10.0 / 4 =2.5 - 取余、求模,公式:a % b = a - a / b * b
- 自增、自减 只能作为一个独立语言使用,如
var i int = 8
var a int
i++ //正确
a = i++ //错误
a = i
a++ //正确
if a++ > 1{} //错误
a ++
if a > 1{} //正确
且只有 a++ a-- ,没有++a --a
练习题:
1、假如还有97天放假,问:xx个星期零xx天
var holiday int = 97
var lastweek = holiday / 7
var lastday = holiday % 7
fmt.Println("剩余星期", lastweek, "星期", lastday)
结果:
剩余星期 13 星期 6
2、定义一个变量保存华氏温度,华氏温度转换摄氏温度的公式为:5/9*(华氏温度-100),求出华氏温度对应的摄氏温度
var huashi float32 = 134.2
var sheshi float32 = 5.00 / 9 * (huashi - 100)
fmt.Println("摄氏温度", sheshi)
结果:
摄氏温度 19
2、关系运算符
3、赋值运算符