golang该如何循环 多层结构体

本文详细介绍了在Golang中如何定义结构体进行嵌套,并通过具体实例展示了如何使用gorm库从数据库中查询并填充这些复杂结构体。通过对Article、SelectArticle等结构体的定义与操作,读者可以深入理解Golang中结构体的灵活应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一:首先贴代码(你们大概看看就行,在看看后面的前端页面展示数据 你们就能理解 结构体嵌套的案例)

package model

import (
	"fmt"
	"time"
)

type Find struct {
	Article       []Article
	SelectArticle []SelectArticle
	RecoArticle   []SelectArticle
	SelectLabel   []SelectLabel
	IndexAbout    SiteInfo
	IndexContact  SiteInfo
}

type Article struct {
	Id          int       `gorm:"column:id"`
	Title       string    `gorm:"column:title"`
	Auth        string    `gorm:"column:auth"`
	Image       string    `gorm:"column:image"`
	Info        string    `gorm:"column:info"`
	Label       string    `gorm:"column:label"`
	Content     string    `gorm:"column:content"`
	Category_id int       `gorm:"column:category_id"`
	Create_at   time.Time `gorm:"column:create_at"`
}

type SelectArticle struct {
	Id    int    `gorm:"column:id"`
	Title string `gorm:"column:title"`
}

type SelectLabel struct {
	Id         int    `gorm:"column:id"`
	Label_name string `gorm:"column:label_name"`
}

type SiteInfo struct {
	Personal_introduction string `gorm:"column:personal_introduction"`
	Contact               string `gorm:"column:contact"`
	About                 string `gorm:"column:about"`
}

//返回首页数据
//article:文章主体数据、 selectArticle:文章精选、 recoArticle:文章推荐、selectLabel文章标签、indexAbout:关于、indexContact:联系
func IndexArticle() (result Find) {
	var (
		article       []Article
		selectArticle []SelectArticle
		recoArticle   []SelectArticle
		selectLabel   []SelectLabel
		indexAbout    SiteInfo
		indexContact  SiteInfo
	)
	article = make([]Article, 100)
	selectArticle = make([]SelectArticle, 100)
	recoArticle = make([]SelectArticle, 100)
	selectLabel = make([]SelectLabel, 100)

	G_db.Debug().Table("article").Select("id,title,auth,image,info").Where("article_status = '1'").Limit(3).Order("create_at desc").Scan(&article)
	G_db.Debug().Table("article").Select("id,title").Where("selected_articles_status = '1' and article_status = '1'").Limit(6).Order("create_at desc").Scan(&selectArticle)

	G_db.Debug().Table("article").Select("id,title").Where("selected_articles_status = '1' and article_status = '1'").Limit(6).Order("create_at desc").Scan(&recoArticle)
	G_db.Debug().Table("article_label").Select("id,label_name").Order("id desc").Scan(&selectLabel)

	G_db.Debug().Table("users").Select("about").Scan(&indexAbout)
	G_db.Debug().Table("users").Select("contact").Scan(&indexContact)
	result = Find{
		Article:       article,
		SelectArticle: selectArticle,
		RecoArticle:   recoArticle,
		SelectLabel:   selectLabel,
		IndexAbout:    indexAbout,
		IndexContact:  indexContact,
	}
	for _, v := range result.Article {
		fmt.Printf("%v,%v\n", v.Id, v.Title)
	}

	for _, v := range result.SelectArticle {
		fmt.Printf("%v,%v\n", v.Id, v.Title)
	}

	return
}

二:
在这里插入图片描述

三:展示前端页面 你们就能理解:
在这里插入图片描述

### C语言结构体变量点运算符的使用方法 在C语言中,当需要访问或操作结构体中的成员时,可以使用 **点运算符(`.`)** 来实现。这种语法适用于直接定义的结构体变量而非指向结构体的指针。 #### 点运算符的基本功能 点运算符用于访问结构体实例中的具体成员。假设有一个名为 `Person` 的结构体类型,其定义如下: ```c struct Person { char name[50]; int age; char address[100]; }; ``` 如果创建了一个基于此类型的结构体变量,则可以通过点运算符访问其中的各个字段。例如,在下面的例子中展示了如何声明、初始化以及修改结构体成员[^3]: ```c #include <stdio.h> int main() { struct Person person1 = {"Alice", 30, "123 Main St"}; // 使用点运算符访问和打印结构体成员 printf("Name: %s\n", person1.name); printf("Age: %d\n", person1.age); printf("Address: %s\n", person1.address); // 修改结构体成员并通过点运算符再次显示更新后的年龄 person1.age = 31; printf("Updated Age: %d\n", person1.age); return 0; } ``` 上述代码片段清楚地表明了点运算符的功能——允许程序员轻松读取或更改特定对象的数据项。 #### 应用场景扩展至GoLang与跨语言交互 对于更复杂的场景比如将Go语言里的结构体转换成C语言可理解的形式或者反之亦然时,需要注意两者之间关于内存布局的不同处理方式可能带来的兼容性问题[^1]。然而这超出了单纯讨论C语言内部机制范围之外的内容。 另外值得注意的是,当涉及到多层嵌套结构体的时候,可能会遇到既有普通成员又有指针成员的情形下,就需要灵活运用"." 和 "->"这两种不同的连接符号来正确获取目标属性值[^2]。 总之,掌握好基础概念之后才能更好地解决实际开发过程中可能出现的各种复杂状况。 ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值