Go语言学习笔记(持续更新中)

写在前面

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、正确的缩进和空白

  1. 一般是4个空格,或者编辑器设置一个tab为4个空格,直接使用tab
  2. 可以使用gofmt命令来进行格式化
    查看格式化:gofmt 文件名
    格式化并保存:gofmt -w 文件名
    在这里插入图片描述
  3. 运算符左右加空格
var a = 1 + 2 * 3
  1. 代码建议不超过80个字符,如果超过,建议换行
    可以使用英文逗号,分隔开,类似其他语言的英文加号+
    在这里插入图片描述

六、常用的dos指令

1、Dos操作基本原理

在这里插入图片描述

2、文件操作

  1. 添加内容到文件,若文件不存在则新建文件
echo 内容 > 文件名

在这里插入图片描述
2) 移动文件

move 源文件 目标目录
  1. 删除文件
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

  1. ptr 是一个指针变量
  2. ptr 的类型 * int
  3. ptr 本身的值是 &num4
  4. 使用 *ptr 获取 ptr的值
    在这里插入图片描述

练习题

  1. 写一个程序,获取一个int变量num的地址,并显示到终端
  2. 将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、标识符的概念

  1. Golang对各种变量、方法、函数等命名时使用的字符序列称为标识符
  2. 能够自己命名的地方都叫标识符

2、标识符的命名规范(重点)

  1. 由26个英文字母、0-9、_组成
  2. 不能用数字作为开头
  3. golang中严格区分大小写
  4. 标识符不能包含空格
  5. 下划线“_”在go中是一个特殊的表示付,称为空标识符。用于占位
  6. 系统保留关键字不能作为标识符,如 func、break
    详见:关键字 | 菜鸟教程
    注意
    如果变量名、函数名、常量名首字母大写,则可以被其他包访问即公开的(public),如果首字母小写,则只能在本包里面访问(private),在golang中没有public,private关键字

第四章 运算符

1、运算符介绍

1、算数运算符

一览表
在这里插入图片描述
注意细节:
除法运算

  1. 如果除数被除数都是整数,则得到的结果都是整数,去掉小数部分,保留小数部分
    10 / 4 = 2
    如果需要得到小数,则需要浮点数参与运算
    10.0 / 4 =2.5
  2. 取余、求模,公式:a % b = a - a / b * b
  3. 自增、自减 只能作为一个独立语言使用,如
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、赋值运算符

在这里插入图片描述
在这里插入图片描述

4、比较运算符

5、逻辑运算符

在这里插入图片描述

6、位运算符

7、其他运算符

  • 1
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值