Go语言学习入门详解
Go语言是Google开发的一门静态强类型、编译型的编程语言,以高效并发和简洁的语法为特点。Go语言尤其适合在系统开发、云计算、分布式系统和微服务等领域应用。这一篇笔记用来记录我第一天学习go的内容。
1. 环境搭建
- 下载和安装:从Go语言官网下载适合系统的安装包,根据下载和安装部分的的指令,直接进行安装,我是用的wsl,因此采用linux的安装方式,只需要使用命令就可以很容易的安装完成。
- 配置环境变量:
- GOROOT:Go的安装目录,我设置在/usr/local/go目录下。
- PATH:在原有的PATH变量中添加/usr/local/go/bin的路径。
- 测试安装:打开命令行,输入
go version查看版本信息,显示成功表示安装完毕。 - 开发工具选择:我选择使用vscode和goland作为编译器。
2. 基础语法
-
包(Package):
- Go的代码组织结构以包为单位,每个Go文件必须声明属于某个包。
- 主程序文件需使用
package main,且包含一个main函数作为程序的入口。其他包通常按功能进行命名,便于代码管理。
-
导入(Import):
-
使用
import引入标准库或自定义的包。例如import "fmt"引入格式化输出包。 -
多个包可以放在一组中,用括号分隔,减少代码行数:
import ( "fmt" "math/rand" )
-
-
变量(Variables):
-
Go是静态类型语言,变量声明时需指定类型(或通过赋值推导类型)。
-
var关键字声明变量,也可以在函数内部使用:=短变量声明快速赋值。var age int = 30 // 显式声明 name := "Alice" // 简短声明,推导出string类型
-
-
常量(Constants):
-
常量用
const声明,表示不可变的值,通常用于定义数学常数、系统参数等。const pi = 3.1415 const appName = "MyApp"
-
3. 数据类型
Go的类型系统分为基本数据类型和复合数据类型。
-
基本数据类型:
int、float32、float64:分别表示整数和浮点数,建议直接使用int和float64。string:表示字符串,使用双引号定义,如"hello"。bool:布尔类型,只有true和false两个值。
-
复合数据类型:
-
数组(Array):固定长度、同一类型的元素集合,定义时需指定长度。示例:
var arr [3]int = [3]int{1, 2, 3} -
切片(Slice):动态数组,可以动态增减元素。切片是Go中最常用的集合类型。示例:
numbers := []int{1, 2, 3, 4} numbers = append(numbers, 5) // 增加新元素 -
字典(Map):键值对数据结构,用于快速查找。定义方式:
cities := map[string]string{"CN": "Beijing", "US": "New York"} cities["FR"] = "Paris" // 添加键值对
-
4. 控制结构
-
条件判断:
-
Go的
if结构与其他语言类似,但不需要用括号包围条件表达式。还可以在if语句内声明变量:if age := 25; age > 18 { fmt.Println("Adult") }
-
-
循环结构:
-
Go只有一种循环结构——
for。基本语法为:for i := 0; i < 5; i++ { fmt.Println(i) } -
for也可以作为while循环使用:n := 0 for n < 5 { fmt.Println(n) n++ }
-
-
选择结构:
-
switch用于多条件判断,支持多种类型。可用于简化if-else逻辑:day := "Monday" switch day { case "Monday": fmt.Println("Start of the week") case "Friday": fmt.Println("Almost weekend") default: fmt.Println("Just another day") }
-
5. 函数
Go语言支持函数,且函数是“一等公民”,可以赋值给变量、作为参数和返回值。
-
基本定义:
func add(a int, b int) int { return a + b } -
多返回值:函数可以返回多个值,在调用时用多个变量接收:
func swap(x, y string) (string, string) { return y, x } -
匿名函数和闭包:函数可以直接在赋值时定义,也可以使用闭包捕获外部变量:
add := func(x, y int) int { return x + y } fmt.Println(add(1, 2))
6. 指针
Go支持指针,通过*和&操作符操作指针值。指针是一种保存内存地址的变量。
-
指针声明:
var p *int // 声明一个指针变量p var x int = 10 p = &x // p保存变量x的地址 fmt.Println(*p) // 通过*p访问x的值 -
指针应用场景:用于函数参数传递时,避免传递大对象,提高效率。
7. 结构体
结构体是用户定义的数据类型,用于封装一组字段。结构体类似其他语言的类,但Go不支持继承。
-
定义结构体:
type Person struct { Name string Age int } -
初始化和访问:
p := Person{Name: "Alice", Age: 25} fmt.Println(p.Name, p.Age) -
结构体方法:可以给结构体定义方法,通常将指针作为接收器,使得方法可以修改结构体字段。
func (p *Person) Greet() { fmt.Println("Hello, my name is", p.Name) }
结语
上面是我第一天学习go的经验和笔记,记录一下说不定以后会用到。