:books: :octocat: Github static blog post, experience the fun of using Issues.Welcome star( 静态博客文章,体验一下使用 Issues 的乐趣,欢迎 star )个人博客地址:blog.hvkcoder.me/love
package main
import "fmt"
type User struct {
Name string
Age int
IsActive bool
}
func setName(user *User,name string){
user.Name = name
}
func main(){
test := User{Name: "jason", Age: 18, IsActive: true}
fmt.Println(test.Name) // jason
setName(&test, "hvkcoder")
fmt.Println(test.Name) // hvkcoder
}
结构体也可以嵌套
package main
import "fmt"
type Address struct {
city, town string
}
type User struct {
Name string
Age int
IsActive bool
UAddress Address
}
func main() {
user := User{
Name: "hvkcoder",
Age: 18,
IsActive: false,
UAddress: Address{"北京", "海淀"},
}
fmt.Println(user) // {hvkcoder 18 false {北京 海淀}}
}
Go 语言中的方法
Go 语言中的方法从某种意义上来说就是函数的语法糖,receiver 作为方法的第一个强制类型参数传入,这也就是 Method Value 与 Method Expression 的区别。
package main
import "fmt"
type Student struct {
Name string
}
// receiver 定义结构方法
func (student Student) SayHi(){
fmt.Println("Hello! My name's", student.Name)
}
func main(){
student := Student{"hvkcoder"}
// 使用 Method Value 方式调用方法
student.SayHi() // Hello! My name's hvkcoder
// 使用 Method Expression 方法调用方法
(Student).SayHi(student) // Hello! My name's hvkcoder
}
既然说了 Go 语言中的方法实际上就是函数的语法糖,因此想通过方法去改变结构体的值,仍然需要传递指针;
package main
import "fmt"
type User struct {
Name string
Age int
IsActive bool
}
func (user *User) setName(name string){
user.Name = name
}
func main(){
test := User{Name: "jason", Age: 18, IsActive: true}
fmt.Println(test.Name) // jason
test.setName("hvkcoder")
fmt.Println(test.Name) // hvkcoder
}
Go 语言的面向对象
Go 语言的面向对象非常简单,仅支持封装,不支持继承和多态。继承和多态是在接口中实现的。
因此 Go 语言中没有
class
,而是通过struct(结构体)
对相同类型或不同类型的数据进行封装。type <structName> struct {}
格式定义结构体;或
结构体.成员名称
访问结构体中的对象;Go 语言中的方法
Go 语言中的方法从某种意义上来说就是函数的语法糖,
receiver
作为方法的第一个强制类型参数传入,这也就是Method Value
与Method Expression
的区别。使用 Go 实现一个二叉排序树