当前位置:网站首页>你有对象类,我有结构体,Go lang1.18入门精炼教程,由白丁入鸿儒,go lang结构体(struct)的使用EP06
你有对象类,我有结构体,Go lang1.18入门精炼教程,由白丁入鸿儒,go lang结构体(struct)的使用EP06
2022-08-09 23:47:00 【InfoQ】
结构体struct的声明
type struct_name struct {
attribute_name1 attribute_type
attribute_name2 attribute_type
...
}
type Lesson struct {
name string //名称
target string //学习目标
spend int //学习花费时间
}
type Lesson2 struct {
name, target string
spend int
}
var MyLesson struct {
name, target string
spend int
}
结构体struct的创建
import "fmt"
type Lesson struct {
name, target string
spend int
}
func main() {
// 使用字段名创建结构体
lesson1 := Lesson{
name: "go lang 1.18",
target: "学习Go lang,并完成web开发任务",
spend: 1,
}
// 不使用字段名创建结构体
lesson2 := Lesson{"go lang 1.18", "学习Go lang,并完成web开发任务", 1}
fmt.Println("lesson1 ", lesson1)
fmt.Println("lesson2 ", lesson2)
}
lesson1 {go lang 1.18 学习Go lang,并完成web开发任务 1}
lesson2 {go lang 1.18 学习Go lang,并完成web开发任务 1}
package main
import "fmt"
func main() {
// 创建匿名结构体变量
mylesson := struct {
name, target string
spend int
}{
name: "Go lang 1.18",
target: "学习go lang,完成web需求",
spend: 1,
}
fmt.Println("mylesson ", mylesson)
}
package main
import "fmt"
type Lesson struct {
name, target string
spend int
}
func main() {
// 不初始化结构体
var lesson = Lesson{}
fmt.Println("lesson ", lesson)
}
lesson { 0}
package main
import "fmt"
type Lesson struct {
name, target string
spend int
}
func main() {
// 为结构体指定字段赋初值
var lesson = Lesson{
name: "go lang 1.18",
}
// 上面的结构体变量 lesson 只初始化了 name 字段, 其他字段没有初始化,所以会被初始化为零值
fmt.Println("lesson ", lesson)
}
lesson {go lang 1.18 0}
结构体struct的属性与指针
package main
import "fmt"
type Lesson struct {
name, target string
spend int
}
func main() {
var lesson = Lesson{
name: "go lang 1.18",
}
fmt.Println("lesson name ", lesson.name)
}
lesson name go lang 1.18
package main
import "fmt"
type Lesson struct {
name, target string
spend int
}
func main() {
var lesson = Lesson{
name: "go lang 1.18",
}
fmt.Println("lesson name ", lesson.name)
lesson.name = "Python 3.11"
fmt.Println("lesson name ", lesson.name)
}
lesson name go lang 1.18
lesson name Python 3.11
package main
import "fmt"
type Lesson struct {
name, target string
spend int
}
func main() {
lesson := &Lesson{"go lang 1.18", "完成对应web需求", 1}
fmt.Println("lesson name: ", (*lesson).name)
fmt.Println("lesson name: ", lesson.name)
}
lesson name: go lang 1.18
lesson name: go lang 1.18
package main
import "fmt"
type Lesson struct {
string
int
}
func main() {
lesson := Lesson{"go lang 1.18", 1}
fmt.Println("lesson ", lesson)
fmt.Println("lesson string: ", lesson.string)
fmt.Println("lesson int: ", lesson.int)
}
lesson {go lang 1.18 1}
lesson string: go lang 1.18
lesson int: 1
嵌套结构体
package main
import "fmt"
type Author struct {
name string
}
type Lesson struct {
name, target string
spend int
author Author
}
func main() {
lesson := Lesson{
name: "go lang 1.18",
spend: 1,
}
lesson.author = Author{
name: "佚名",
}
fmt.Println("lesson name:", lesson.name)
fmt.Println("lesson spend:", lesson.spend)
fmt.Println("lesson author name:", lesson.author.name)
}
lesson name: go lang 1.18
lesson spend: 1
lesson author name: 佚名
package main
import (
"fmt"
)
type Address struct {
city, state string
}
type Person struct {
name string
age int
Address
}
func main() {
var p Person
p.name = "Naveen"
p.age = 50
p.Address = Address{
city: "Chicago",
state: "Illinois",
}
fmt.Println("Name:", p.name)
fmt.Println("Age:", p.age)
fmt.Println("City:", p.city) //city is promoted field
fmt.Println("State:", p.state) //state is promoted field
}
Name: Naveen
Age: 50
City: Chicago
State: Illinois
package main
import (
"fmt"
)
type name struct {
firstName string
lastName string
}
func main() {
name1 := name{"Steve", "Jobs"}
name2 := name{"Steve", "Jobs"}
if name1 == name2 {
fmt.Println("name1 and name2 are equal")
} else {
fmt.Println("name1 and name2 are not equal")
}
name3 := name{firstName:"Steve", lastName:"Jobs"}
name4 := name{}
name4.firstName = "Steve"
if name3 == name4 {
fmt.Println("name3 and name4 are equal")
} else {
fmt.Println("name3 and name4 are not equal")
}
}
name1 and name2 are equal
name3 and name4 are not equal
package main
import (
"fmt"
)
type image struct {
data map[int]int
}
func main() {
image1 := image{data: map[int]int{
0: 155,
}}
image2 := image{data: map[int]int{
0: 155,
}}
if image1 == image2 {
fmt.Println("image1 and image2 are equal")
}
}
# command-line-arguments
.\test.go:18:5: invalid operation: image1 == image2 (struct containing map[int]int cannot be compared)
结构体绑定方法
package main
import "fmt"
// Lesson 定义一个名为 Lesson 的结构体
type Lesson struct {
name, target string
spend int
}
// ShowLessonInfo 定义一个与 Lesson 的绑定的方法
func (l Lesson) ShowLessonInfo() {
fmt.Println("name:", l.name)
fmt.Println("target:", l.target)
}
func main() {
l := Lesson{
name: "go lang 1.1 8",
}
l.ShowLessonInfo()
}
name: go lang 1.1 8
target:
package main
import "fmt"
// Lesson 定义一个名为 Lesson 的结构体
type Lesson struct {
name, target string
spend int
}
// ShowLessonInfo 定义一个与 Lesson 的绑定的方法
func (l Lesson) ShowLessonInfo() {
fmt.Println("spend:", l.spend)
}
// AddTime 定义一个与 Lesson 的绑定的方法,使 spend 值加 n
func (l *Lesson) AddTime(n int) {
l.spend = l.spend + n
}
func main() {
lesson13 := Lesson{
spend: 1,
}
fmt.Println("添加add方法前")
lesson13.ShowLessonInfo()
lesson13.AddTime(5)
fmt.Println("添加add方法后")
lesson13.ShowLessonInfo()
}
添加add方法前
spend: 1
添加add方法后
spend: 6
结语
边栏推荐
- 算法---整数替换(Kotlin)
- LeetCode常见题型——链表
- 【Django】缓存
- 从TRPO到PPO(理论分析与数学证明)
- 西安生物素-四聚乙二醇-酰胺-4苯酚 浅黄色半固态
- 程序员从佩洛西窜访事件中可以学到什么?
- abicc 知:API compatibility report 介绍
- -向量点积-
- The technical aspects of the byte have been passed, and the salary has been negotiated for 20K*13, but the result is still being brushed. I asked the HR why...
- 拒绝“重复造轮子”,百度EasyDL让你玩转AI定制开发
猜你喜欢
C语言--数据的存储(上)
Leetcode79. 单词搜索
CST Studio Suite 2021 software installation package and installation tutorial
组件传值-作用域插槽
基于FPGA的任意字节数的串口接收(含源码工程)
数字孪生智慧制造生产线项目实施方案,平台认知与概念
Web性能测试模型小结
CST Studio Suite 2021软件安装包和安装教程
MATLB|And her ups and downs and finally reached the peak of life [Romantic Journey]
【剑指offer】第一题 第二题
随机推荐
c语言文件基本操作总结
3.4 - 编译与解释 3.5 - 编译过程 3.8 - 文法
LSTM-based distributed energy generation prediction (Matlab code implementation)
【毕业设计】基于ESP32的在线墨水屏桌面摆件 -物联网 单片机 嵌入式
【数据存储】signed,unsigned到底怎么区分?如何计算?
最高月薪15K,谁有历经千辛万苦的意志,谁就能收获属于自己的成功~
从TRPO到PPO(理论分析与数学证明)
vmware Exsi 网卡配置
LeetCode常见题型——链表
Kubernetes YAML编写 讲解
NTP SERVICE TASK 在GWserver配置、启用NTP服务,为当前环境提供时钟同步服务,Client主机可以从该服务器同步时间。
-象棋比赛-
【问题解决】训练和验证准确率很高,但测试准确率很低
E - Sugoroku 3(期望dp)
错误提示:Syntax error on token “function”, delete this token
WPF DataGrid using data templates
足不出户也能看星空
2022中高级Android面试题汇总来助你通过面试
Redis 大 key 要如何处理?
CAS:851113-28-5 (生物素-ahx-ahx-酪胺)