6结构体和方法:
结构体是一种自定义的数据类型,可以包含多个字段。可以定义结构体类型,并为结构体类型定义方法。结构体的定义如下:
type Person struct {
name string
age int
}
func (p Person) sayHello() {
fmt.Println("Hello, my name is", p.name)
}
上述代码定义了一个名为Person的结构体类型,包含name和age两个字段。然后,通过使用func关键字和接收者(receiver)将sayHello方法与Person类型关联起来。方法可以在结构体实例上调用,例如:
person := Person{name: "Alice", age: 25}
person.sayHello() // 输出:Hello, my name is Alice
7指针:
Go语言中的函数传参都是值拷贝,当我们想要修改某个变量的时候,我们可以创建一个指向该变量地址的指针变量。传递数据使用指针,而无须拷贝数据。类型指针不能进行偏移和运算。Go语言中的指针操作非常简单,只需要记住两个符号:&(取地址)和*(根据地址取值)。 每个变量在运行时都拥有一个地址,这个地址代表变量在内存中的位置。Go语言中使用&字符放在变量前面对变量进行“取地址”操作。 Go语言中的值类型(int、float、bool、string、array、struct)都有对应的指针类型,如:*int、*int64、string等。 Go语言支持指针类型。指针是存储变量内存地址的变量。可以使用&操作符获取变量的地址,使用操作符获取指针指向的变量的值。例如:
x := 10
ptr := &x // 获取x的地址并赋值给ptr
fmt.Println(*ptr) // 输出:10,*ptr获取指针ptr指向的值
8并发:
Go语言内置了轻量级的并发支持,称为goroutine。可以使用关键字go在函数调用前启动一个新的goroutine。通过使用通道(channel)进行goroutine之间的通信和同步。例如:
func printMessage(msg string) {
fmt.Println(msg)
}
func main() {
go printMessage("Hello") // 启动一个新的goroutine
printMessage("World") // 在主goroutine中执行
}
上述代码在主goroutine中启动了一个新的goroutine,同时打印出"Hello"和"World"。
这些是Go语言的基础语法概述。