这是我参与「第三届青训营 -后端场」笔记创作活动的的第1篇笔记
1.Go语言基本语法
Package:
Go语言是使用包来组织源代码的,包(package)是多个 Go 源码的集合,是一种高级的代码复用方案。Go语言中为我们提供了很多内置包,如 fmt、os、io 等。任何源代码文件必须属于某个包,同时源码文件的第一行有效代码必须是package pacakgeName 语句,通过该语句声明自己所在的包。如package main
注意点:
1.一个Go语言程序有且只有一个main函数,他是Go语言程序的入口函数,且必须属于main包,没有或者多于一个进行Go语言程序编译时都会报错
2.包名为 main 的包为应用程序的入口包,编译不包含 main 包的源码文件时不会得到可执行文件。
一个文件夹下的所有源码文件只能属于同一个包,同样属于同一个包的源码文件不能放在多个文件夹下。
3.包在引用时一般使用全路径引用。比如在GOPATH/src/a/b/ 下定义一个包 c。在包 c 的源码中只需声明为package c,而不是声明为package a/b/c,但是在导入 c 包时,需要带上路径,例如import "a/b/c"。
Package reference:
是GO语言使用的一个环境变量,使用绝对路径提供项目的工作目录。通过命令GOPATHgo env可以查看当前的值
其目录一般为:
GOPATH
--bin # 存放编译后的可执行文件 --pkg # 依赖包编译后的*.a文件 --src # 存放源码文件,以代码包为组织形式设置
GOPATH后,工程中使用 import的根目录是GOPATH中的src目录所以GOPATH下必须要有src目录,不然import导包的时候会找不到
import导包规则:
1、先去GOROOT/src/路径下找 (系统环境变量GOROOT,即使用go env命令显示的GOROOT)
2、如果1没有,就去Project GOPATH/src/路径下找
3、如果2还没找到,就去Global GOPATH路径下找 (系统环境变量,即使用go env命令显示的GOPATH)
Project GOPATH 代表项目所使用的 GOPATH,该设置会被保存在工作目录的 .idea目录下,不会被设置到环境变量的 GOPATH 中,但会在编译时使用到这个目录。建议在开发时填写项目 GOPATH,每一个项目尽量只设置一个 GOPATH,不使用多个 GOPATH 和全局的 GOPATH
导入的包必须要被使用,否则程序编译时也会报错。当一个Go程序需要导入多个包时,可以使用单行导入或者多行导入(使用括号)
import导包格式:
1、标准引用 import fmt
2、设置别名引用 import format_go fmt
3、省略方式的引用import . fmt,这种引用相当于把包fmt的命名空间合并到当前程序的命名空间了,因此可以直接引用,不用在加上前缀fmt.
4、仅执行包的初始化函数import _ fmt
标识符导出
如果一个包要引用另一个包的标识符(比如结构体、变量、常量、函数等),那么首先必须要将其导出,具体做法就是在定义这些标识符的时候保证首字母大写(首字母小写的标识符只能限制在包内引用)。另外在被导出的的结构体或者接口中,首字母大写的字段和方法才能被包外访问。
基本语句
1.常量没有具体的类型
2.var a="initial"或者var b int=10,一般这样定义会自动推断类型,但也可以显式定义。
3.还有一种定义方式是 f:=true
4. if 语句判断条件没有括号,且必须有大括号
5.c++语句里面swith要加break,Go里面不用
6.make可用于创建切片,如s:=make([]string,3)
7.append可用于追加元素,如append(s,"d","e")
8.len用于获取长度,copy用于切片复制
9.m=make(map[string]int)创建一个map类型的切片,其中string为key的类型,int为value的类型,delete(m,"one")用于删除
10.range用于遍历,如for i,num:=range nums,则i为索引,nums为值
11.结构体不初始化的话就会为空
12.printf中不用区分类型,%v即可,%+v是字段和值,%#v会打印出,包+变量类型+字段+值
13.JSON处理,func Marshal(v interface{}) ([]byte, error),func Unmarshal(data []byte, v interface{}) error,[]byte是一种类型,输出时还需转换,结构体输出时类型默认开头大写,若需要小写需要在结构体具体变量最后面加上 'json:"name"'
14.time.Now()常用于获取时间,还有Sub,Diff,Format,Date等等
15.strconv用于字符串的转换,如ParseFloat,ParseInt,Atoi等
16.os和os/exec等库用于获取进程信息
2.实战训练
猜数游戏
rand.Intn(Maxnum)会输出一个小于Maxnum的随机自然数,但是由于默认情况下种子固定,所以随机出的数也是固定的,一般惯例是用时间戳来赋值随机数种子,即上rand.Seed(time.Now().UnixNano()),这样我们生成的就是一个伪随机数
具体运行过程中发现输入一个数字会报错,好像是因为读取的字符串结尾除了换行符外还有回车符
命令行词典
要求运行时输入一个单词,能直接输出对应的词典,实行时没找到相应的html代码
主要用到两个网站:
[JSON转Golang Struct - 在线工具 - OKTools](https://oktools.net/json2go)
[Convert curl commands to code (curlconverter.com)](https://curlconverter.com/)
Socks S5代理