这是我参与「第五届青训营 」伴学笔记创作活动的第 1 天
一.本堂课重点内容
这节课着重学习的是go语言的基础语法
二.详细知识点介绍及实践练习例子
记录一些常用的go语言基础语法
- 定义一个类型为字符串,值为value的变量a
var a = "value"a := "value"a := string(value)
- 定义一个类型为字符串,值为value的常量a
const a string = "value"
- for循环及if语句的使用,定义一个for循环,初始值为n=0,条件为n<5,当n是2的整数倍时输出n
for n := 0; n < 5; n++ {
if n%2 == 0 {
fmt.println(n)
//continue 进入下一次循环
//break 结束for循环
}
fmt.Println(n)
}
- switch语句的使用,当a=1时输出"one",a=2时输出"two"...
a := 2
switch a {
case 1:
fmt.Println("one")
case 2:
fmt.Println("two")
default:
fmt.Println("other")
}
- 数组的创建及遍历
创建一个大小为2的int类型数组并赋值1,2
//第一种方法
var a [2]int
a[0]=1
a[1]=2
//第二种方法
a :=[2]int{1,2}
//遍历a
for i := 0; i < len(a); i++ {
fmt.Println(a)
}
- 切片的使用
// 创建初始容量为1的数组
s := make([]string, 3)
s[0] = "a"
//到达上限后仍可以用append方法继续添加元素
s = append(s, "e", "f")
//将s中元素拷贝到c
c := make([]string, len(s))
copy(c, s)
- map的创建及添加key,value,删除key,value
//创建一个map,并添加一个value为1的key"one"
m := make(map[string]int)
m["one"] = 1
//删除key为"one"的键值对
delete(m, "one")
- range的使用(相当于Java中的加强for)
nums := []int{2, 3}
//i为遍历时的索引,num为遍历时的值
for i, num := range nums {
//进行相关操作
}
- 函数的创建及使用
//接收一个参数,string类型的变量k,返回一个布尔类型的值
func exists(k string) (ok bool) {
//方法体内容
}
func main() {
//调用上述方法
ok := exists("A")
}
- 指针的用法
指针是一种指向变量的地址的变量。指针变量的值是一个地址,它指向的变量的值存储在该地址中。
定义指针变量的语法如下:
var variable_name *variable_type
其中,* 符号表示变量是一个指针。
例如,定义一个指向 int 变量的指针变量:
var p *int
获取指针变量指向的变量的值需要使用 * 号进行间接引用
x := 5
p := &x
fmt.Println(*p) // 5
- 结构体的使用
结构体是一种用于描述一组具有相关属性的数据的数据类型。结构体可以包含多种数据类型的字段,每个字段都有一个名称和类型。
结构体的定义语法如下:
type struct_name struct {
...
}
例如,定义一个名为 Person 的结构体,包含名称和年龄两个字段:
type Person struct {
name string
age int
}
创建结构体变量
p1 := Person{name: "John", age: 25}
访问结构体字段:
fmt.Println(p1.name) // John
- 结构体方法
方法定义语法:
func (s struct_name) method_name(parameters) return_type {
// 方法具体内容
}
例如,定义一个名为 Introduce 的方法,用于输出 Person 结构体的名字和年龄:
func (p Person) Introduce() {
fmt.Printf("我的年龄是 %s ,我 %d 岁了", p.name, p.age)
}
调用方法:
p1 := Person{name: "John", age: 25}
p1.Introduce()
在结构体方法中,可以通过使用结构体的字段来访问和修改结构体的数据,并使用这些字段执行一些操作。
结构体方法和普通函数的区别是,结构体方法接收者(receiver),也就是前面的 (p Person),这样它就能访问结构体的字段,并且不需要再传递结构体变量作为参数
- error的用法 错误是一种特殊类型,表示在执行过程中出现的异常情况。一般来说,当函数或方法执行时出现错误,它将返回一个 error 类型的值。
error 是一个接口类型,它有一个方法 Error() string。在 Go 中,只要实现了 Error() string 方法的类型都可以作为 error 类型使用。
使用 errors.New 函数来创建一个 error 类型的值
import "errors"
if someCondition {
return nil, errors.New("some error message")
}
检查错误
result, err := someFunction()
if err != nil {
// handle error
}
在 Go 中,通常使用返回值来表示函数或方法的正常结果,而使用 error 类型来表示错误情况。这样,在调用函数或方法时,可以通过检查 error 值来判断执行是否成功,并执行相应的错误处理。
- json序列化
- 序列化
json.Marshal()方法 - 反序列化
json.Unmarshal()方法
- 序列化
三. 课后个人总结
除了上述内容外,还有一些工具方法,比如统计字符串长度的strings.Count()方法,字符串转数字的strconv.Atoi()方法,由于种类繁多,个人认为不需要全部记忆,稍微留有印象即可
同时,在进行猜数字游戏时,需要注意一些细节,例如fmt.Scanf("%v", &input)用于读取用户输入时。如果用户在输入时按了回车键,那么可能会产生一个换行符,它将作为字符串的一部分读入,而不是表示输入结束的符号。在这种情况下,strconv.Atoi(input)将无法将字符串转换为整数,会返回一个错误。我们可以使用fmt.Scanln() 来代替fmt.Scanf("%v", &input) 或者在输入后使用strings.TrimSpace()将空白和换行符去掉。