这是我参与「第五届青训营 」伴学笔记创作活动的第 1 天
本篇文章重点只介绍个人觉得go语言和以前所学语言不同之处,以便以后复习所用。
一、什么是go语言:
1.高性能、高并发(不需要在导入第三方库来优化性能)
2.语法简单,学习曲线平缓
3.丰富的标准库
4.完善的工具链
5.静态链接
6.快速编译
7.跨平台
8.垃圾回收
二、环境下载
新手小白推荐直接使用goland。
(jetbrain2022最新破解补丁2022.11.7.zip - 123云盘 (123pan.com))
找到的一个破解版(嘿嘿嘿)
三、基础语法
Go语言的基础语法与常规的编程语言基本类似,所不同的有声明变量的方式,数组、切片、字典的概念及功能与Java不太相同。在我看来有点像python+java+c++的合体版。
3.1 变量、常量、nil
3.1.1 变量声明
Go语言中共有两种方式
1.使用var关键字声明,注意:Go语言的声明变量类型位于变量名称的后面。Go语句结束不需要分号。(和python相同)
如:
var a int
2.使用:=赋值。
a := 3 等同于 var a int = 3
变量的类型会根据右侧的值进行匹配,例如"3"会匹配为int,"result"会匹配为string等。
3.1.2 常量声明
使用const来声明常量,常量在声明后不可改变。
const language string = "go"
3.1.3 nil与零值
只声明未赋值的变量,其值为nil。
零值:
数值类型为 0,
布尔类型为 false,
字符串为 ""(空字符串)。
3.2 判断语句
1.if后不需要加括号(和python类似)
2.注意go语言的if..else语句中else必须紧跟if的最后一个括号
错误写法
if{
}
else{
}
正确写法
if{
}else{
}
3.3 循环语句
go语言只有一个for循环语句,没有do...while..等
3.4 switch语句
go语言的switch语句最后一个default时,不需要加break。
3.5 数组
和python相同,不赘述
3.6 map
Go语言中的map是一种内置数据结构,用于存储键值对(和python的字典相似)。map可用于统计字符串中单词出现次数或维护用户信息数据库等任务。可以使用make函数创建新的map
package main
import "fmt"
func main() {
m := make(map[string]int)//创造一个空的map
m["one"] = 1
m["two"] = 2
fmt.Println(m) // map[one:1 two:2]
fmt.Println(len(m)) // 2
fmt.Println(m["one"]) // 1
fmt.Println(m["unknow"]) // 0
r, ok := m["unknow"]//通过索引查找
fmt.Println(r, ok) // 0 false
delete(m, "one")//删除函数
m2 := map[string]int{"one": 1, "two": 2}
var m3 = map[string]int{"one": 1, "two": 2}
fmt.Println(m2, m3)
}
复制代码
3.7 指针
对于学过C语言的同学来说,指针是非常熟悉的,就是一个在内存中实际的16进制的地址值,引用变量的值通过此地址去内存中取出对应的真实值。
说到这顺便分享一下我在学习java时遇到的,值传递和引用传递的区别。 (JAVA:值传递和引用传递_SummerOfFoam的博客-CSDN博客_值传递和引用传递) 注:不是我写的。看到了给大家分享一下。
func main() {
i := 0
//使用&来传入地址
fmt.Println(&i) //0xc00000c054
var a, b int = 3 ,4
//传入 0xc00000a089 0xc00000a090
fmt.Println(add(&a, &b))
}
//使用*来声明一个指针类型的参数与使用指针
func add(a *int, b *int)int{
//接收到 0xc00000a089 0xc00000a090
//前往 0xc00000a089位置查找具体数据 并取赋给x
x := *a
//前往 0xc00000a090位置查找具体数据 并取赋给y
y := *b
return x+y
}
3.8 错误处理
Go 语言中,错误处理是一个非常重要的部分。Go 提供了一种简单的方法来处理错误,即将错误作为函数的返回值。
在 Go 中,错误发生时,函数返回一个 error 值
func divide(a, b int) (int, error) {
if b == 0 {
return 0, fmt.Errorf("division by zero")
}
return a / b, nil
}
上例是一个非常常见的除0的例子,在这个例子中,divide 函数接受两个 int 参数,并且返回一个 int 和一个 error。如果 b 等于 0,那么 divide 函数会返回一个 error。如果 b 不等于 0,那么 divide 函数会返回 a / b 和 nil。
3.9 输出格式
go语言不像c语言,不同类型的输出需要不同种的符号,如整数用%d 等等、 go语言中直接用%v即可,除此之外%+v 和 %#v是 fmt包中使用的两个格式化动词。
%+v 会输出详细的值信息,包括结构体字段名称和值。 %#v 会输出详细的值信息,包括类型和值, 这个值得输出格式是一个可以直接复制粘贴到程序中使用的 Go 代码。
import "fmt"
type point struct {
x, y int
}
func main() {
s := "hello"
n := 123
p := point{1, 2}
fmt.Println(s, n) //hello 123
fmt.Println(p) //{1 2}
//%v可以打印任何变量,数字用:%d,字符串用:%s,获取更加详细的结果:%+v,在详细上进一步详细:%#v
fmt.Printf("s=%v\n", s) //s=hello
fmt.Printf("s=%v\n", n) //s=123
fmt.Printf("s=%v\n", p) //s={1 2}
fmt.Printf("s=%+v\n", p) //s={x:1 y:2}
fmt.Printf("s=%#v\n", p) //s=main.point{x:1, y:2}
f := 3.141592653
fmt.Println(f) //3.141592653
fmt.Printf("%.2f\n", f) //3.14
}