写在前面的话
学习编程语言,就像学习一门新的交流工具,而每种语言都有它的独特魅力和应用场景。我之前一直在学习Java,通过这次青训营才开始学习Go语言。通过这次学习我归纳出两者之间的一些差异,主要包括以下几个方面:
-
语法简单:与 Java 相比,Go 的语法更加简洁,去除了许多复杂的特性(如继承、多重实现等),代码更易读。
-
高效并发:Go 原生支持并发编程,通过
goroutine和channel实现的并发模式,比 Java 的线程更轻量、更直观。 -
性能出色:与 Java 运行在 JVM 上不同,Go 直接编译为机器码,执行效率更高。
-
生态广泛:Go 在云计算、微服务、网络编程等领域非常流行。
1. 什么是 Go 语言?
- Go 语言(Golang) 是 Google 开发的一种开源编程语言。
- 设计目标:简单、可靠、高效。
- 适用于高性能应用开发,特别是在服务器编程、并发处理和云计算领域。
2. 安装和配置
安装 Go
- 前往 Go 官网 下载适合你的操作系统的版本。
- 安装后,配置环境变量(安装程序通常自动完成)。
检查安装
在终端输入以下命令,检查 Go 是否安装成功:
go versio
如果返回 Go 的版本信息,说明安装成功。
3. 第一个 Go 程序
示例:Hello, World
创建一个名为 main.go 的文件,并写入以下代码:
package main
import "fmt"
func main() {
fmt.Println("Hello, World!")
}
代码解析:
package main:定义程序的包名,main表示这是一个可执行程序。import "fmt":导入标准库fmt,用于格式化输入和输出。func main():定义主函数,程序从这里开始执行。fmt.Println():打印输出,并换行。
4. 基础语法
变量
Go 是强类型语言,变量在使用前需要声明。
声明变量的方式
var name string = "GoLang"
var age int = 10
var isLearning bool = true
简短声明
name := "GoLang" // Go 会自动推导类型
age := 10
isLearning := true
数据类型
-
基本类型:
- 数字:
int,float64 - 字符串:
string - 布尔值:
bool
- 数字:
-
复合类型:
- 数组:
[5]int - 切片(动态数组):
[]int - 字典:
map[string]int
- 数组:
条件语句
if age > 18 {
fmt.Println("Adult")
} else {
fmt.Println("Minor")
}
简短条件
if age := 20; age > 18 {
fmt.Println("Adult")
}
循环
Go 中只有一种循环结构:for。
基础用法
for i := 0; i < 5; i++ {
fmt.Println(i)
}
遍历数组或切片
nums := []int{1, 2, 3, 4, 5}
for index, value := range nums {
fmt.Printf("Index: %d, Value: %d\n", index, value)
}
5. 常用特性
函数
Go 中函数是基本的代码块。
函数定义
func add(x int, y int) int {
return x + y
}
多返回值
func divide(x, y int) (int, int) {
return x / y, x % y
}
匿名函数
sum := func(a, b int) int {
return a + b
}
fmt.Println(sum(3, 5))
数组与切片
数组
var arr [3]int = [3]int{1, 2, 3}
fmt.Println(arr)
切片
nums := []int{1, 2, 3}
nums = append(nums, 4) // 动态添加元素
fmt.Println(nums) // 输出: [1, 2, 3, 4]
字典
Go 中的字典是键值对的集合,用 map 表示:
scores := map[string]int{
"Alice": 90,
"Bob": 85,
}
fmt.Println(scores["Alice"]) // 输出: 90
结构体
结构体是用户定义的复合数据类型:
type Person struct {
Name string
Age int
}
p := Person{Name: "Alice", Age: 30}
fmt.Println(p.Name) // 输出: Alice
并发
Go 的并发模型基于 goroutine 和 channel。
启动 goroutine
go func() {
fmt.Println("Hello from Goroutine!")
}()
使用 channel
ch := make(chan int)
go func() {
ch <- 42
}()
val := <-ch
fmt.Println(val) // 输出: 42
6. Go 语言的优点
- 简单清晰:语法直观,没有复杂的概念。
- 内置并发:通过
goroutine和channel简化并发编程。 - 高效:编译成机器码,性能接近 C/C++。
- 强大的标准库:提供丰富的工具和库。