Go 语言入门笔记|青训营
Go语言基础语法的学习笔记
简介
GoLang(简称为Go)是一门由Google开发的开源编程语言,是一种并发、高效和简单的编程语言,特别适用于构建大规模网络服务和分布式系统。
Go语言具有以下特点:
- 并发性:Go语言内置支持并发编程,使用Goroutines(轻量级线程)和Channels(通道)来实现并发操作。
- 性能优化:Go语言的设计目标之一是提供出色的性能。它具有高效的垃圾回收机制,并且能够利用多核处理器的优势。
- 静态编译:Go语言是静态类型的编程语言,并且支持交叉编译。这意味着您可以在一个平台上编译Go代码,并在其他平台上运行,而无需对代码进行修改。
- 内置工具:Go语言提供了许多内置工具,如格式化代码工具(gofmt)、性能分析工具(pprof)等,这些工具有助于编写高质量的代码和调试应用程序。
Go语言的入门
1.Hello, World!
从一个传统的"Hello, World!"程序开始。创建一个名为hello.go
的文件,内容如下:
package main
import "fmt"
func main() {
fmt.Println("Hello, World!")
}
在命令行中,使用以下命令运行程序:
go run hello.go
终端得到输出:"Hello, World!"。我建议如果是简单编写程序使用Vscode即可,当然goland的代码补全更为舒适。
2. 变量和数据类型
以下是一些常见的基本数据类型:
// 整数类型
var num int = 10
// 浮点数类型
var pi float64 = 3.14
// 布尔类型
var isTrue bool = true
// 字符串类型
var message string = "Hello, Go!"
下面是简洁的变量声明与赋值
x := 5
在这里需要吐槽一下,Go语言与C、C++、C#、Java等语言的差距很大,变量类型在后面,赋值语句也较为独特,初学时很容易报错。
3.函数
下面是一个简单的函数示例:
func add(a, b int) int {
return a + b
}
函数名在前,参数类型在后。在本例中,函数名是add
,它接受两个整数类型的参数a
和b
,并返回它们的和。函数可以有多个参数和返回值,并且支持多返回值,这一点与python相同。
4.控制流
Go支持常见的控制流语句,如if
、for
和switch
。
if语句:
if age >= 18 {
fmt.Println("成年人")
} else {
fmt.Println("未成年人")
}
for循环:
在Go中 for与while语句进行了合体
for i := 0; i < 5; i++ {
fmt.Println(i)
}
switch语句:
switch可以替代多个if else的组合
day := "Monday"
switch day {
case "Monday":
fmt.Println("星期一")
case "Tuesday":
fmt.Println("星期二")
default:
fmt.Println("其他")
}
5. 数组和切片
Go支持数组和切片。数组在声明时需要指定长度,而切片则是动态大小的。
切片中较为常用的函数为 append与 slice,append 来追加元素, slice可以用来进行切片。
// 数组
var numbers [5]int = [5]int{1, 2, 3, 4, 5}
// 切片
var mySlice []int = numbers[1:4]
6. 结构体
结构体是一种自定义的复合数据类型,用于存储不同类型的字段。
type Person struct {
name string
age int
}
func main() {
person := Person{name: "Alice", age: 30}
fmt.Println(person.name, person.age)
}
7.结构体方法
虽然没有面对对象但是在 Golang 里面可以为结构体去定义一些方法,这使得结构体存在一些“类成员函数”。在实现结构体的方法的时候分带指针与不带指针的写法。带指针的参数在函数内会对结构体进行修改,函数内使用的是不带指针的参数的拷贝,是无法对结构体进行修改的。
8. 并发
Go原生支持并发编程,通过goroutine
和channel
实现并发操作。
func printNumbers() {
for i := 1; i <= 5; i++ {
fmt.Println(i)
}
}
func main() {
go printNumbers() // 启动goroutine
time.Sleep(time.Second * 1) // 等待一秒钟,以确保goroutine有足够的时间执行
}
对Go语言的看法与体会
首先,go语言与其他主流的编程语言在语法上的差距很大。Go语言的编程风格偏向于面向过程编程,对面对对象变成的特性支持较弱。Go语言的语法相对简单和一致,代码具有良好的可读性。在一定程度上简化了编程,避免冗余的语法和复杂的概念,从而使代码更易于维护和理解。Go标准库非常强大且丰富,涵盖了网络、加密、IO、测试等多个方面。
Golang使用了错误值(error)来处理异常情况,而不是像其他一些编程语言那样使用异常机制。这使得我这样的小白也可以简单的入手Go语言的错误处理,更好的展示了编写中出现的错误。