Golang 学习笔记05-结构体基础

AI-摘要
Yuan GPT
AI初始化中...
介绍自己 🙈
生成本文简介 👋
推荐相关文章 📖
前往主页 🏠
前往爱发电购买
Golang 学习笔记05-结构体基础
SEAlencehe结构体
类似于js的类,关键字type
type 结构体名称 struct{
名称 类型//成员或属性
}
package main
import "fmt"
type Student struct {
Name string
}
func (s Student) Study() {
fmt.Printf("%s 正在学习\n", s.Name)
}
func main() {
// 结构体
s1 := Student{Name: "张三"}
s1.Study()
}
组合
类似继承,直接写需要组合的结构体
type Person struct {
Name string
}
type Student struct {
Person
Name string
}
package main
import "fmt"
type Person struct {
Name string
}
type Student struct {
Person
Name string
}
func (s Student) Info() {
fmt.Printf("姓名%s 性别%s \n", s.Name, s.Person.Name) //因为这里的Name冲突了。所以这里要加上Person.Name
}
func (s Student) Study() {
fmt.Printf("%s 正在学习\n", s.Name)
}
func main() {
// 结构体
// 父类实例化
p1 := Person{Name: "男生"}
//子类实例化
s1 := Student{Person: p1, Name: "张三"}
s1.Study()
s1.Info()
}
张三 正在学习
姓名张三 性别男生
结构体指针
func (s Student) SetName(name string) {
s.Name = name
}
func main() {
s1.SetName("李四")
s1.Info()
}
姓名张三 性别男生
这时候发现name并没有被修改成功,这时候需要把指针放到Student
func (s *Student) SetName(name string) {
s.Name = name
}
结构体tag
type User struct {
Name string
Age int
Password string
}
func main() {
user := User{Name: "张三", Age: 18, Password: "123456"}
// 这里的_ 表示忽略错误
byteData, _ := json.Marshal(user)
fmt.Println(string(byteData))
}
{"Name":"张三","Age":18,"Password":"123456"}
这里输出的是json,但是一般json文件是小驼峰
type User struct {
Name string `json:"name"`
Age int `json:"age"`
Password string `json:"-"` //这里表示不需要转
}
func main() {
user := User{Name: "张三", Age: 18, Password: "123456"}
// 这里的_ 表示忽略错误
byteData, _ := json.Marshal(user)
fmt.Println(string(byteData))
}
{"name":"张三","age":18}
如果实例化的时候没有传参数,输出的值是初始化值
user := User{Name: "张三", Password: "123456"}
{"name":"张三","age":0}
type User struct {
Name string `json:"name"`
Age int `json:"age,omitempty"` //忽略空值
Password string `json:"-"` //这里表示不需要转
}
评论
匿名评论隐私政策
✅ 你无需删除空行,直接评论以获取最佳展示效果

