使用 Next,2024年最新2024网易Golang高级面试题总结

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Golang全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添加V获取:vip1024b (备注go)
img

正文

2. 集成组件

现在,让我们将这些组件集成到我们的Layout应用程序中。首先,创建一个组件并将 HeaderFooter放入其中:

import Header from “./Header”;
import Footer from “./Footer”;
import {PropsWithChildren} from “react”;

export default function Layout({ children }: PropsWithChildren) {
return (
<>

{children}

创建布局组件后,剩下要做的就是将其添加到_app.tsx文件中:

// _app.tsx
function MyApp({ Component, pageProps }: AppProps) {
return <>

<Component {…pageProps} />

</>
}

如果运行应用的开发模式并转到 localhost 页面,现在应该会看到已创建应用的布局。在本教程的后面部分,我们将看到如何为它添加样式并赋予它drip

但首先,让我们为我们的主页提供它应得的内容。

3. 自定义您的主页

由于我们需要显示有关我们商店和我们将销售的产品的信息,因此我们将创建一些不同的组件以保持模块化和可维护性。然后,我们将看看如何组装它们:

3. 创建所需的组件
产品组件

由于这是电子商务应用程序的Next.js教程,因此您需要一个Product组件才能显示在主页上。

该组件将输出您需要显示的有关我们特定产品的任何信息。您可以创建一个与 Snipcart 的产品定义相匹配的接口IProduct``IProductProps,以及一个定义我们道具类型的接口,这些道具将作为参数传递给函数。

// components/Product.tsx

export interface IProduct {
id: string
name: string
price: number
url: string
description: string
image: StaticImageData
}

在界面下方,添加以下组件:

// components/Product.tsx

interface IProductProps {
product: IProduct
}

const Product = (props: IProductProps) => {
return (

{props.product.name}

{props.product.description}

{props.product.image.src}
${props.product.price.toFixed(2)}
关于 Image 组件的说明

请注意,在下面的块中,我们使用的是 Next.js 的 Image 组件,而不是一个好的 ol’ 标签。前者实际上是后者的延伸。它允许自动图像优化,默认延迟加载,并在浏览器允许时以 WebP 格式提供图像,从而将图像优化到客户端设备。此外,该组件会根据请求优化图像,从而节省您的构建时间。这有助于减少您的网站加载时间,从而保持用户的兴趣!img

4. 产品列表组件

我们将此产品组件集成到一个ProductList组件中,其名称不言自明ProductList.tsx。该组件将用于在主页上显示我们的产品列表。因此,您可以创建一个接口IProductListProps来描述一个数组IProduct,该数组最终将由我们的网站传递:​​​​​​​

import Product, {IProduct} from “./Product”;

interface IProductListProps {
products: IProduct[]
}

const ProductList = (props: IProductListProps) => {
return (

{props.products.map((product, index) => )}
) }

export default ProductList

5. 预渲染数据和导入组件

在此阶段,您可能希望将产品填充到 ProductList 组件中。在纯 React 中,你可以在 ProductList中使用 React 的 useEffect 生命周期来填充数据。但是,在静态或服务器端呈现期间,不会在服务器上调用此方法。

值得庆幸的是,Next.js 添加了两种预呈现数据的方法:getStaticProps,getServerSideProps。在构建时获取数据,以及在每个请求上获取数据。例如,后者对于价格可能快速波动的拍卖店可能很有用。在我们的用例中,由于产品不经常更改,我们将使用前者,因为预渲染将通过保存用户请求来减少加载时间。​​​​​​​

export const products: IProduct[] = [
{
id: “halfmoon”,
name: “Halfmoon Betta”,
price: 25.00,
image: halfmoonBettaPicture,
description: “The Halfmoon betta is arguably one of the prettiest betta species. It is recognized by its large tail that can flare up to 180 degrees.”,
url: ‘/api/products/halfmoon’
},
(…)
{
id: “veiltail”,
name: “Veiltail Betta”,
price: 5.00,
image: veiltailBettaPicture,
description: “By far the most common betta fish. You can recognize it by its long tail aiming downwards.”,
url: ‘/api/products/veiltail’
}
]

export const getStaticProps: GetStaticProps = async (context) => {
return {
props: {
products
}
}
}

Jumbotron & Contact添加组件是为了完成页面,但它们对于演示不是必需的。可以在此处查看 GitHub 存储库中的组件。

6. 导入 Snipcart

现在,让我们将 Snipcart 安装到我们的网站中。首先,您需要从 index.tsx 页面内的 next/head 导入组件Head,这将允许您在​​​​​​​<Head>元素中添加 HTML。

为此,可以在 Index 函数 return 子句中添加以下代码:

// pages/index.tsx

My awesome store

我们现在需要加载 Snipcart 的脚本内容。Next.js 在 next/script模块中提供了一个脚本组件来执行此操作。它允许通过提供不同的加载策略来优化性能。

// pages/index.tsx

不要忘记将属性data-api-key替换成您自己的 API 密钥;)

7. 产品验证

现在 Snipcart 已安装,完成订单前的最后一步是验证您的产品。

1.HTML 验证

第一种方法是简单地将产品列表中的 URL 更改为每个产品的主页,以进行 Snipcart 的 HTML 验证。它会读取我们主页上的内容并对其进行抓取,以便根据需要验证产品。您可以这样做并跳到下一节,您将拥有一个有效的电子商务网站!/``/

如果您好奇,让我们借此机会查看一个简洁的 Next.js 功能:无服务器 API 路由与 Snipcart 的 JSON 验证相结合。

2. 使用 Next.js 无服务器 API 进行 JSON 验证

对于更复杂的方案,让 API 以 JSON 格式返回我们的产品信息可能很有用。为此,我们需要为每个产品设置一个唯一的 URL,该 URL 将在 JSON 文件中返回其信息。

  1. 配置静态 API 路由

虽然从技术上讲,我们只需要一个返回每个产品的动态 API 路由,但让我们让这个 API RESTful 并有一个返回整个产品列表的路由。

您可能已经注意到,已使用该项目创建了一个 API 文件夹。在此文件夹中,创建另一个名为“的文件夹,并向其添加一个包含以下内容的文件:products``index.ts

// In pages/api/products/index.ts

import {NextApiRequest, NextApiResponse} from “next”;
import {products} from “…/…/index”;

export default function handler(req: NextApiRequest, res: NextApiResponse) {
res.status(200).json(products);
}

如果您现在转到 ,您将获得一个包含您的产品列表的 JSON 文件。https://localhost:3000/${YOUR_PORT}

  1. 配置动态 API 路由

在文件夹products中,将以下内容添加到文件[productId].ts中。请注意括号。这种特殊语法告诉 Next.js [productid] 是一个动态参数。因此,如果您转到 ,您应该获得我们产品之一的 JSON 信息。​​​​​​​​​​​​​​/api/products/ONE_OF_YOUR_PRODUCTS_ID

import {NextApiRequest, NextApiResponse} from “next”;
import {products} from “…/…/index”;
import {IProduct} from “…/…/…/components/Product”;

export interface ISnipcartProduct {
id: string
name: string
price: number
url: string
description: string
image: string // Hack to pass the image URL instead of the StaticImage object we required
}

export default function handler(req: NextApiRequest, res: NextApiResponse) {
const {productId} = req.query;
const product: IProduct | undefined = products.find(p => p.id === productId);
if (!product) {
res.status(404).json({});
return ;
}
const snipcartProduct: ISnipcartProduct = {…product, image: product?.image.src ?? “”}

res.status(200).json(snipcartProduct);
}

您现在应该能够完成测试订单了!

是时候设计我们的网站了,这样它对我们未来的客户更具吸引力。

8. 设置Next.js SPA 的样式

如果你注意了,你就会发现本教程中的大多数组件已经有了类名。我们现在将看看 2 种不同的方法来应用它们:

1. 设置全局样式表

style 文件夹中,创建一个样式表​​​​​​​global.scss。之后,只需将其导入:​​​​​​pages/_app.tsx

// in pages/_app.tsx

import “…/styles/globals.scss”;

全局样式表只能导入到_app.tsx文件中。我使用了 SCSS,它没有内置于 Next.js 中,但只需运行 npm install sass

2. 为组件设置 CSS 模块

Next.js 还支持 CSS 模块,如果您的 CSS 文件变大,这将变得非常方便。要使用它,只需创建一个遵守约定的文件,例如,或 .[name].module.css``Product.module.css``Product.module.scss

之后,您可以将其作为对象导入组件文件中,并用它访问样式:styles

import styles from ‘…/styles/Product.module.scss’;
(…)

const Product = (props: IProductProps) => {
return (

{props.product.name}

{props.product.description}

(...) )

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注Go)
img

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
uct}>

{props.product.name}

{props.product.description}

(...) )

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注Go)
[外链图片转存中…(img-gQvVKKSk-1713192792207)]

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 19
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值