一、软件下载和环境配置
1.1、go语言安装
go语言中文网: studygolang.com/dl
go语言环境配置:
- 安装完毕后打开环境配置文件。
#进入用户的home目录
cd /users/自己电脑的用户名
#打开环境变量配置文件
open .bash_profile
#报错 .bash_profile does not exist
#第一次配置环境变量先创建文件
touch .bash_profile
#配置go环境变量复制以下内容
export GOPATH=/user/local/go
export PATH=$GOROOT/bin:$PATH:.
#配置文件立即生效
source .bash_profile
#检查环境变量
go -version
- 接下来进入vscode插件栏搜索go并下载
- 在vscode试运行,发现右下角跳出弹窗需要下载插件,下载后失败。
#先进入go下载目录
cd /user/ 这里是用户名 /go
#从github下载插件依赖包
git clone github.com/ramya-rao-a/go-outline
#下载好依赖包后执行一下内容等待插件下载
go install golang.org/x/tools/gopls@latest
这就做好配置的工作了,这里参考了
1.2、go基础入门
###1.2.1 代码形式
- 这里和c语言不同的是package,package需要为main,需要有main函数,否则无法运行
- package名称的限制
不能把多个包放在同一个目录里,也不能把同一个包的文件分拆到不同目录中。同一目录下的同一级go文件,package名称必须相同,否则无法运行。 package的名称不需要和目录名称相同
package main
import("fmt")
func main(){
fmt.Pringln("helloworld")
}
1.2.2 变量声明
go变量的声明是”var 变量名 类型“形式
var a int
var a="intital" # 可以不声明变量
var a, b int=1, 2
常量的声明是”const 常量名 类型=值“
const pi float32=3.14
单精度float32 双精度float64
1.2.3 数据类型
字符串
- 字符串可以拼接
var a = "initial"
g := a + "foo"
数组类型是一组固定长度的同类型元素
`var 变量 [长度]类型` </br>
`var a[5]int`</br>
- 可以忽略初始化表达式中长度,
var a[...]int{1,2} - 可以使用指定索引值的方式来初始化数组,
var arr = [...]int{
99: 39 //将第100个(下标为99)的值赋值为39
}
- 数组遍历
var a = [...]string{"甘肃“, ”上海“, ”北京“}
// 方法1:for循环遍历
for i := 0; i < len(a); i++{
fmt.Println(a[i])
}
// 方法2: for range遍历
for index, value := range a {
fmt.Println(index,value)
}
// 输出: 0 甘肃 1 上海...
切片是动态数组,格式为“[]类型“
var name[] type
var a = []int{}
-
切片可以用append追加元素
s[0]="a"
s = append(s,"d") # append(追加对象,追加内容) -
切片的初始化
//方法一:直接声明
//方法二:用make函数创建切片
m := make([]type,length,caoacity) //capacity是容量
//方法三:
arr := [10]int{1, 2, 3, 4, 5, 6, 7}
ls := [2:5:8] //[low: high: max]
fmt.Println("ls:", ls) // ls:[3 4 5]
- 字典类型是键值组合,格式为“map[键类型]值类型“
- map的三种定义方式
//方法一:语法糖
var dic map[string]string = map[string]string{"name":"隔壁老王", "hoppy":"喜欢隔壁少妇"}
//方法二:通过make(类型,容量)
var dict = make(map[string]string,3)
dict["name"]="隔壁小刘"
dict["hoppy"]="被隔壁王姐喜欢"
//方法三:通过make(类型)
var dict = make(map[string]string)
dict["name"]="隔壁小刘"
dict["hoppy"]="被隔壁王姐喜欢"
//方法四:通过map直接创建
var mapTwo = map[string]string{}
mapTwo["name"]="俺是老王"
mapFour := map[string]string{
"a": "A",
"b": "B", //需要以逗号结束
}
和切片一样,没有被创建的map不能被使用
//map声明后没有定义不能直接使用,只有通过make或语法糖创建后才会有空间 var dict map[string]string dict["name"] = "张姐" //报错
- 增,修改 : 和python一样直接用字典名[元素]=值
- 减: delete(字典名,"被删元素对应的key")
- 查询:使用
ok-idiom模式func MapFindOne() { var dict map[string]string = map[string]string{"name": "laowang", "age": "18", "sex": "男"} value, ok := dict["age1"] if ok { fmt.Println("字典有这个key,对应的值为", value) } else { fmt.Println("字典没有这个key,对应的值为", nil) } if value, ok := dict["age"]; ok { fmt.Println("字典有这个key,对应的值为", value) } //字典没有这个key,对应的值为 <nil> //字典有这个key,对应的值为18
字典遍历
- 注意: map和数组以及切片不同,map中存储的数据是无序的,所以多次打印的 顺序可能不同
匿名变量:
m := map[string]int{ "hello": 100, "world": 200, } for _,value := range m{ // _相当于占位符 fmt.Println(value) }
指针变量
func main(){
add2ptr(&n)
fmt.Println(n) // 7
}
func add2ptr(n *int){
*n += 2
}
结构体类型
- 创建结构体切片:
users := []user{}
type user struct {
name string
password string
}
func main(){
//添加元素
a := user{name:"wang", password: "1024"} b := user{"wang","1023"}
c := user{name: "wang"}
c.password = "1024"
fmt.Println(checkPassword(a,"haha")) //false
func checkPassword(u user, password string) bool {
return u.password == password
}