Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $YECBGYFECGEAFWHA as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2

Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $BBWFDDBHHYHDXXAB as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2
怎样用Golang构建可观测性平台 集成OpenTelemetry_创想鸟

怎样用Golang构建可观测性平台 集成OpenTelemetry

选择opentelemetry作为golang可观测性方案的核心,是因为它提供了开放、厂商中立的标准化框架,统一了分布式追踪、指标和日志的采集,解决了传统方案碎片化和供应商锁定的问题;在golang应用中,通过context.context机制实现上下文的传递,结合otelhttp等中间件自动注入和传播span,确保跨服务调用链的完整性;构建可观测性平台时,后端可灵活选择jaeger、tempo等开源组件或datadog等商业服务,指标以prometheus为核心,日志可选loki或elk,再通过grafana实现多源数据的统一可视化与关联分析,从而构建高效、可扩展的全栈可观测体系。

怎样用Golang构建可观测性平台 集成OpenTelemetry

用Golang构建可观测性平台,核心在于集成OpenTelemetry,它提供了一套标准化的API、SDK和协议,用于收集分布式追踪、指标和日志。这让开发者能够以统一的方式从应用中导出遥测数据,并将其发送到各种后端系统进行存储、分析和可视化,从而全面了解应用运行时状态和性能瓶颈。

解决方案

在Golang应用中集成OpenTelemetry,通常涉及几个关键步骤:初始化SDK、配置资源信息、设置Span处理器与导出器(针对追踪)、注册Meter Provider与配置View(针对指标)、以及配置Logger Provider与导出器(针对日志)。

首先,你需要引入OpenTelemetry的Golang SDK及其对应的导出器。例如,对于追踪,你可以选择

otlptrace

导出到OTLP兼容的收集器,或者

jaeger

导出到Jaeger。

立即学习“go语言免费学习笔记(深入)”;

package mainimport (    "context"    "fmt"    "log"    "net/http"    "time"    "go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp"    "go.opentelemetry.io/otel"    "go.opentelemetry.io/otel/attribute"    "go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc"    "go.opentelemetry.io/otel/metric"    "go.opentelemetry.io/otel/propagation"    "go.opentelemetry.io/otel/sdk/resource"    sdktrace "go.opentelemetry.io/otel/sdk/trace"    semconv "go.opentelemetry.io/otel/semconv/v1.24.0"    "google.golang.org/grpc"    "google.golang.org/grpc/credentials/insecure")var tracer = otel.Tracer("my-service-tracer")var meter = otel.Meter("my-service-meter")func initTracer() *sdktrace.TracerProvider {    ctx := context.Background()    // 创建OTLP gRPC导出器    conn, err := grpc.NewClient(        "localhost:4317", // OpenTelemetry Collector OTLP gRPC 端口        grpc.WithTransportCredentials(insecure.NewCredentials()),        grpc.WithBlock(),    )    if err != nil {        log.Fatalf("failed to create gRPC client: %v", err)    }    traceExporter, err := otlptracegrpc.New(ctx, otlptracegrpc.WithGRPCConn(conn))    if err != nil {        log.Fatalf("failed to create trace exporter: %v", err)    }    // 配置资源,描述服务自身信息    res, err := resource.New(ctx,        resource.WithAttributes(            semconv.ServiceNameKey.String("my-golang-app"),            semconv.ServiceVersionKey.String("1.0.0"),            attribute.String("environment", "development"),        ),    )    if err != nil {        log.Fatalf("failed to create resource: %v", err)    }    // 创建TracerProvider    bsp := sdktrace.NewBatchSpanProcessor(traceExporter)    tp := sdktrace.NewTracerProvider(        sdktrace.WithResource(res),        sdktrace.WithSpanProcessor(bsp),        sdktrace.WithSampler(sdktrace.AlwaysSample()), // 总是采样    )    // 全局注册TracerProvider和文本图传播器    otel.SetTracerProvider(tp)    otel.SetTextMapPropagator(propagation.NewCompositeTextMapPropagator(        propagation.TraceContext{},        propagation.Baggage{},    ))    return tp}func main() {    tp := initTracer()    defer func() {        if err := tp.Shutdown(context.Background()); err != nil {            log.Printf("Error shutting down tracer provider: %v", err)        }    }()    // 示例:HTTP请求处理    http.Handle("/hello", otelhttp.NewHandler(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {        ctx, span := tracer.Start(r.Context(), "hello-handler")        defer span.End()        // 模拟一些工作        time.Sleep(100 * time.Millisecond)        // 记录事件        span.AddEvent("processing request")        // 模拟调用另一个内部函数        callInternalFunction(ctx)        fmt.Fprintln(w, "Hello, OpenTelemetry!")    }), "hello-route"))    log.Println("Server started on :8080")    log.Fatal(http.ListenAndServe(":8080", nil))}func callInternalFunction(ctx context.Context) {    _, span := tracer.Start(ctx, "internal-function")    defer span.End()    // 模拟更深层次的逻辑    time.Sleep(50 * time.Millisecond)    // 记录指标    counter, err := meter.Int64Counter("my_counter")    if err != nil {        log.Printf("Failed to create counter: %v", err)    } else {        counter.Add(ctx, 1, metric.WithAttributes(attribute.String("operation", "internal_call")))    }}// 注意:日志集成通常需要使用OpenTelemetry Logger SDK,目前还在稳定阶段,// 常见的做法是使用现有的日志库(如zap, logrus)并配置其输出到OTLP/Loki等日志后端,// 或者将trace_id/span_id注入到日志字段中,实现日志与追踪的关联。

这段代码展示了如何初始化一个

TracerProvider

,使用OTLP gRPC导出器将追踪数据发送到OpenTelemetry Collector。在HTTP处理器中,

otelhttp.NewHandler

自动创建并传播Span,而

tracer.Start

则用于手动创建子Span。指标方面,简单展示了如何获取一个计数器并增加其值。日志部分,OpenTelemetry的Logger SDK还在发展中,目前更常见的做法是确保日志中包含追踪ID和Span ID,以便在日志管理系统中与追踪关联起来。

为什么选择OpenTelemetry作为Golang可观测性方案的核心?

选择OpenTelemetry作为Golang可观测性方案的核心,在我看来,最主要的原因是它解决了分布式系统可观测性长期存在的碎片化问题。过去,每个厂商都有自己的SDK和数据格式,一旦你选定了一个供应商,就很难迁移。OpenTelemetry则提供了一个开放、厂商中立的框架,它不仅仅是一个SDK,更是一套标准。这意味着你的Golang应用一旦集成了OpenTelemetry,无论你想把数据发送到Jaeger、Prometheus、Loki、Datadog还是New Relic,理论上都只需要更换一下导出器配置,而无需修改核心业务代码。这种灵活性和未来兼容性是无价的。

此外,OpenTelemetry涵盖了追踪(Tracing)、指标(Metrics)和日志(Logs)这三大支柱,形成了一个统一的遥测数据收集体系。对于Golang开发者而言,这意味着可以使用一套API来处理所有类型的遥测数据,减少了学习成本和集成复杂性。社区的活跃度也极高,有大量的贡献者在不断完善SDK和生态工具,这为我们在实际项目中遇到问题时提供了坚实的支持。从工程实践的角度看,标准化能够降低团队内部协作的摩擦,也方便不同服务之间遥测数据的互操作。

在Golang应用中,如何有效管理和传递OpenTelemetry上下文?

在Golang应用中,OpenTelemetry上下文的管理和传递是实现分布式追踪和Baggage(传递任意键值对数据)的关键。Golang的

context.Context

机制天然地与OpenTelemetry的设计理念契合。OpenTelemetry SDK会把当前的Span信息、Baggage等封装在

context.Context

中。

核心原则是:始终传递

context.Context

。无论你的函数是处理HTTP请求、数据库查询、消息队列消费还是RPC调用,只要它可能涉及到分布式追踪,就应该接收并传递

context.Context

参数。

例如,当你接收到一个HTTP请求时,

otelhttp.NewHandler

会自动从请求头中提取追踪上下文并将其注入到请求的

Context

中。你后续的业务逻辑函数就可以直接使用这个

Context

来创建子Span:

func processOrder(ctx context.Context, orderID string) error {    // 从传入的ctx中创建新的span    ctx, span := tracer.Start(ctx, "process-order")    defer span.End()    // 假设这里需要调用另一个服务    // 在发起gRPC或HTTP请求时,确保将ctx传递给客户端,以便传播追踪上下文    // 例如:    // client := &http.Client{Transport: otelhttp.NewTransport(http.DefaultTransport)}    // req, _ := http.NewRequestWithContext(ctx, "GET", "http://another-service/api/data", nil)    // resp, err := client.Do(req)    // ...    span.AddEvent("order processed successfully", trace.WithAttributes(attribute.String("order.id", orderID)))    return nil}

在跨服务通信时,OpenTelemetry的

propagation.TextMapPropagator

扮演着至关重要的角色。它负责将

context.Context

中的追踪信息(如

traceparent

和

tracestate

)序列化到HTTP请求头、gRPC元数据或消息队列的消息属性中,并在接收端反序列化回

context.Context

。你通常会看到

propagation.NewCompositeTextMapPropagator

与

propagation.TraceContext{}

和

propagation.Baggage{}

一起使用,确保标准的W3C Trace Context和OpenTelemetry Baggage都能被正确地传播。

一个常见的错误是忘记在异步操作(如goroutine)中传递

Context

。如果你在一个新的goroutine中执行任务,但没有将父

Context

传递过去,那么这个goroutine中产生的Span将无法与父Span关联起来,导致追踪链断裂。正确的做法是显式地将

Context

作为参数传递给goroutine启动的函数。

构建可观测性平台时,Golang应用如何选择合适的后端存储与可视化工具?

选择后端存储和可视化工具,对我来说,这是一个权衡成本、复杂性、可伸缩性和团队熟悉度的过程。没有“一刀切”的最佳方案,但OpenTelemetry的标准化输出让选择变得更加灵活。

对于分布式追踪(Traces),常见的选择有:

Jaeger: 这是CNCF项目,非常成熟,开源且功能强大。它有自己的存储(Cassandra/Elasticsearch)和UI,非常适合中小型团队快速搭建。Golang应用通过OpenTelemetry OTLP导出器或Jaeger原生导出器即可将数据发送过去。Tempo: Grafana Labs推出的一个高度可伸缩的开源追踪后端,它以对象存储(如S3、GCS)作为主存储,成本效益高。它的优势在于与Grafana和Loki的深度集成,形成一个统一的Grafana可观测性栈。商业SaaS服务: Datadog、New Relic、Lightstep等,它们提供托管服务,省去了运维烦恼,通常有更丰富的功能和更专业的支持。

针对指标(Metrics),几乎是Prometheus的天下:

Prometheus: 业界标准,开源,Pull模型,非常适合收集Golang应用暴露的HTTP

/metrics

端点数据。它的查询语言PromQL强大灵活。VictoriaMetrics/Mimir: 如果你需要比单体Prometheus更强的可伸缩性和高可用性,它们是Prometheus的长期存储解决方案。VictoriaMetrics轻量高效,Mimir是Grafana Labs为大规模场景设计的。Golang应用通过OpenTelemetry SDK的Prometheus导出器,可以将指标数据转换为Prometheus可抓取格式。

至于日志(Logs),选择则更为多样:

Loki: Grafana Labs的另一个项目,被称为“日志的Prometheus”,它不索引日志内容,只索引标签,因此成本较低且查询速度快。与Grafana深度集成。Elasticsearch + Kibana (ELK Stack): 传统且功能强大的日志解决方案,适合大规模日志存储和复杂查询。但运维成本相对较高。Splunk/Datadog Logs: 商业日志管理平台,功能全面,但通常成本较高。

可视化方面,Grafana几乎是所有这些后端工具的“瑞士军刀”。它能够连接Prometheus、Loki、Tempo、Elasticsearch、Jaeger等多种数据源,并提供强大的仪表盘构建能力。通过Grafana,你可以将追踪、指标和日志数据在同一个界面上关联起来,比如从一个Prometheus指标图点击跳转到相关的追踪或日志,实现真正的三位一体可观测性。在实践中,我发现将Golang应用产生的

trace_id

和

span_id

注入到日志中,然后在Grafana中通过Loki和Tempo的集成,可以非常高效地从日志跳转到具体的追踪,或者从追踪查看相关日志,这极大地提升了问题排查效率。

以上就是怎样用Golang构建可观测性平台 集成OpenTelemetry的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1399862.html

赞 (0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
Golang的rand随机数生成 种子设置技巧
上一篇 2025年12月15日 16:32:54
Golang开发Markdown解析器 语法转换实现
下一篇 2025年12月15日 16:33:10

相关推荐

  • 拼多多眼药水为啥那么便宜?这类商品有质量保证吗?拼多多眼药水便宜50%的秘密!是套路还是真划算?医生教你3招验真伪!

    拼多多眼药水为啥那么便宜?这类商品有质量保证吗?拼多多眼药水便宜50%的秘密!是套路还是真划算?医生教你3招验真伪!拼多多眼药水为啥那么便宜?这类商品有质量保证吗?拼多多眼药水便宜50%的秘密!是套路还是真划算?医生教你3招验真伪!拼多多眼药水为啥那么便宜?这类商品有质量保证吗?拼多多眼药水便宜50%的秘密!是套路还是真划算?医生教你3招验真伪!拼多多眼药水为啥那么便宜?这类商品有质量保证吗?拼多多眼药水便宜50%的秘密!是套路还是真划算?医生教你3招验真伪!

    一、拼多多眼药水价格低廉的三大核心原因 1. 供应链扁平化降低流通成本 拼多多实行“厂家直供+平台直营”模式,直接与药品生产商合作。相比传统销售链路中多层经销商不断加价,这种精简中间环节的供应方式可减少15%至30%的流通费用。 2. 平台补贴政策持续发力 依托百亿补贴专项支持,平台对医疗健康品类进…

    2026年9月27日 • 用户投稿
    200
  • Java Stream API处理嵌套对象字段求和:以购物车条目为例

    Java Stream API处理嵌套对象字段求和:以购物车条目为例Java Stream API处理嵌套对象字段求和:以购物车条目为例Java Stream API处理嵌套对象字段求和:以购物车条目为例Java Stream API处理嵌套对象字段求和:以购物车条目为例

    本文深入探讨如何利用Java Stream API高效地对复杂嵌套对象中的数值字段进行聚合求和。通过一个购物车条目的具体案例,演示了如何从多层级对象中提取并累加BigDecimal类型的费用数据,强调了mapToDouble、BigDecimal的精确计算以及在处理可能为空的字段时,结合注解进行nu…

    2026年9月27日 • 用户投稿
    000
  • 抖音带货橱窗怎么弄?抖音怎么开通橱窗

    抖音平台已成为电商盈利的关键渠道。抖音带货橱窗作为其核心功能,为众多电商从业者提供了高效的销售渠道。本文将详细介绍如何创建抖音带货橱窗,助您实现电商收益。 一、抖音带货橱窗的基础定义 抖音带货橱窗是商家通过平台开设的展示区,用于陈列商品信息并促成销售。橱窗涵盖服饰、美妆、家居、食品等多种商品类型,为…

    2026年9月27日
    000
  • MAC如何安全移除外置硬盘_macOS正确推出外置磁盘与U盘方法

    MAC如何安全移除外置硬盘_macOS正确推出外置磁盘与U盘方法MAC如何安全移除外置硬盘_macOS正确推出外置磁盘与U盘方法MAC如何安全移除外置硬盘_macOS正确推出外置磁盘与U盘方法MAC如何安全移除外置硬盘_macOS正确推出外置磁盘与U盘方法

    答案:可通过桌面图标、访达、拖拽至废纸篓、菜单栏图标、快捷键或终端命令安全弹出外置设备。具体操作包括右键点击桌面图标选择推出、在访达侧边栏点击弹出按钮、拖动设备图标到废纸篓、从菜单栏状态图标选择弹出、使用Command+E快捷键,或在终端输入diskutil unmountDisk命令完成弹出,确保…

    2026年9月27日 • 用户投稿
    000
  • 如何使用update

    如何使用update如何使用update如何使用update如何使用update

    Update的用法,需要具体代码示例 在编程中,我们经常需要对数据进行更新操作。在许多编程语言和数据库中,都提供了update语句或者update函数来实现数据的更新功能。在本文中,我们将介绍update的用法,并提供具体的代码示例来帮助读者更好地掌握这一技术。 一、update的基本语法 在大多数…

    2026年9月27日 • 用户投稿
    100
  • Stripe Webhook签名验证错误解析与中间件顺序优化

    Stripe Webhook签名验证错误解析与中间件顺序优化Stripe Webhook签名验证错误解析与中间件顺序优化Stripe Webhook签名验证错误解析与中间件顺序优化Stripe Webhook签名验证错误解析与中间件顺序优化

    Stripe Webhook签名验证时出现”Payload must be provided as a string or a Buffer”错误,通常是由于Express应用中全局express.json()中间件过早解析了原始请求体。本文将深入解析此问题,并提供通过调整中…

    2026年9月27日 • 用户投稿
    000
  • OpenAI 推出全新 AI 功能 ChatGPT Pulse

    OpenAI 推出全新 AI 功能 ChatGPT PulseOpenAI 推出全新 AI 功能 ChatGPT PulseOpenAI 推出全新 AI 功能 ChatGPT PulseOpenAI 推出全新 AI 功能 ChatGPT Pulse

    openai 宣布上线全新功能 chatgpt pulse,标志着 chatgpt 正式从被动响应式对话工具进化为具备主动服务能力的个性化助手。该功能目前以预览版本的形式率先登陆移动端,仅对 pro 订阅用户(每月 200 美元)开放使用权限。 据官方介绍,Pulse 是 ChatGPT 全新打造的…

    2026年9月27日 • 用户投稿
    100
  • windows怎么查看电脑支持的内存大小 windows查看电脑最大支持内存方法

    windows怎么查看电脑支持的内存大小 windows查看电脑最大支持内存方法windows怎么查看电脑支持的内存大小 windows查看电脑最大支持内存方法windows怎么查看电脑支持的内存大小 windows查看电脑最大支持内存方法windows怎么查看电脑支持的内存大小 windows查看电脑最大支持内存方法

    首先通过命令提示符输入wmic memphysical get maxcapacity获取主板最大支持内存,再结合CPU-Z等工具或官网规格确认具体参数,最后用任务管理器查看插槽使用情况以规划升级方案。 如果您计划升级电脑内存,但不确定主板或系统最大支持多大的内存容量,则需要准确查询硬件的限制。以下…

    2026年9月27日 • 用户投稿
    100
  • sublime怎么设置在按下回车时自动缩进_sublime按回车自动缩进设置

    sublime怎么设置在按下回车时自动缩进_sublime按回车自动缩进设置sublime怎么设置在按下回车时自动缩进_sublime按回车自动缩进设置sublime怎么设置在按下回车时自动缩进_sublime按回车自动缩进设置sublime怎么设置在按下回车时自动缩进_sublime按回车自动缩进设置

    确保”auto_indent”: true已启用,使新行继承上一行缩进;2. 检查并正确设置文件语法类型,确保语言识别无误;3. 推荐配置”translate_tabs_to_spaces”: true和”tab_size”: …

    2026年9月27日 • 用户投稿
    200
  • JScrollPane滚动条自动更新行为的控制策略与实践

    JScrollPane滚动条自动更新行为的控制策略与实践JScrollPane滚动条自动更新行为的控制策略与实践JScrollPane滚动条自动更新行为的控制策略与实践JScrollPane滚动条自动更新行为的控制策略与实践

    本教程详细探讨如何有效控制JScrollPane的滚动条自动更新行为,特别是在内容重绘后避免意外滚动。文章重点介绍通过设置滚动条策略(如ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER)来禁用滚动条或其自动更新,并简要提及Viewport尺寸调整的替代方法…

    2026年9月27日 • 用户投稿
    000
  • C# .NET中基于JWT和外部授权服务器的REST API安全配置指南

    C# .NET中基于JWT和外部授权服务器的REST API安全配置指南C# .NET中基于JWT和外部授权服务器的REST API安全配置指南C# .NET中基于JWT和外部授权服务器的REST API安全配置指南C# .NET中基于JWT和外部授权服务器的REST API安全配置指南

    本文旨在提供一个简洁明了的教程,指导开发者如何在C# .NET应用中,以纯资源服务器模式,通过外部授权服务器(如AWS Cognito或Asgardeo)实现REST API的安全保护。文章将重点介绍如何利用JWT Bearer认证机制,通过最小化配置,快速构建一个能够验证传入访问令牌的API服务,…

    2026年9月27日 • 用户投稿
    100
  • Intel未来4年CPU路线图曝光:100核不是梦 AMD迎来致命一击

    Intel未来4年CPU路线图曝光:100核不是梦 AMD迎来致命一击Intel未来4年CPU路线图曝光:100核不是梦 AMD迎来致命一击Intel未来4年CPU路线图曝光:100核不是梦 AMD迎来致命一击Intel未来4年CPU路线图曝光:100核不是梦 AMD迎来致命一击

    intel未来4年cpu路线图曝光:100核不是梦 amd迎来致命一击 9月25日消息,Intel的Arrow Lake处理器发布一年了,今年底又要升级了,这一代会转向18A工艺和新架构,亮点不少。 至于未来的产品规划,跑得比较快的MLID又给出了未来几代的路线图,一杆子给支到2029年底了,也就是…

    2026年9月27日 • 用户投稿
    000
  • 京东拼购入驻,所需条件与费用有哪些?详解商家资质、经验要求及质保金、平台费、扣点明细!

    京东拼购入驻,所需条件与费用有哪些?详解商家资质、经验要求及质保金、平台费、扣点明细!京东拼购入驻,所需条件与费用有哪些?详解商家资质、经验要求及质保金、平台费、扣点明细!京东拼购入驻,所需条件与费用有哪些?详解商家资质、经验要求及质保金、平台费、扣点明细!京东拼购入驻,所需条件与费用有哪些?详解商家资质、经验要求及质保金、平台费、扣点明细!

    在电商迅猛发展的当下,京东拼购为大量商家开辟了一个充满潜力的销售渠道。然而,若想成功入驻该平台,商家必须清楚了解其入驻门槛及相关费用信息。这不仅有助于提前筹备相关材料,还能有效提升审核通过率,助力商家快速切入这一活跃市场,开启线上增长新篇章。 一、京东拼购入驻条件 (一)基本资质要求 1. 持有有效…

    2026年9月27日 • 用户投稿
    200
  • linux Kernel

    linux Kernellinux Kernellinux Kernellinux Kernel

    探索linux内核的奥秘,从基础到高级,逐步揭开其神秘面纱。无论你是初学者还是资深开发者,本文都将为你提供深入了解linux内核所需的知识和工具。 以上就是linux Kernel的详细内容,更多请关注创想鸟其它相关文章!

    2026年9月27日 • 用户投稿
    100
  • Codename One:实现安全的数字密码输入框

    Codename One:实现安全的数字密码输入框Codename One:实现安全的数字密码输入框Codename One:实现安全的数字密码输入框Codename One:实现安全的数字密码输入框

    本文详细介绍了在Codename One中创建既能接受纯数字输入又能进行密码遮罩的文本输入框的方法。通过使用位或运算符(|)组合TextArea.NUMERIC和TextArea.PASSWORD约束,可以有效地实现这一需求,避免了链式调用constraint()的常见误区,从而提升用户体验和输入安…

    2026年9月27日 • 用户投稿
    100
  • 苹果 A19 芯片内部特写:架构微调带来能效提升

    苹果 A19 芯片内部特写:架构微调带来能效提升苹果 A19 芯片内部特写:架构微调带来能效提升苹果 A19 芯片内部特写:架构微调带来能效提升苹果 A19 芯片内部特写:架构微调带来能效提升

    苹果最新一代的a19芯片在芯片制造工艺方面较a18有显著提升,近期一组显微照片首次揭示了iphone 17系列最新芯片的内部细节。 本次随iPhone 17发布亮相的A19及A19 Pro芯片,是苹果自研芯片设计的又一进步。尽管苹果方面针对性能提升作出多项官方承诺,但由ChipWise团队拍摄的So…

    2026年9月27日 • 用户投稿
    200
  • AZ录屏画笔使用技巧

    AZ录屏画笔使用技巧AZ录屏画笔使用技巧AZ录屏画笔使用技巧AZ录屏画笔使用技巧

    az屏幕录制是一款功能多样的录屏软件,除了提供常规的录屏操作外,还拥有许多实用的附加功能,比如在录制时可使用的画笔标注功能。 1、 打开手机中的AZ屏幕录制应用 2、 进入应用设置界面后向下滑动,找到“录制工具”相关选项 3、 开启画笔功能后,屏幕上将会出现画笔图标 笔魂AI 笔魂AI绘画-在线AI…

    2026年9月27日 • 用户投稿
    000
  • win8如何查看windows体验指数_Win8体验指数查看方法

    win8如何查看windows体验指数_Win8体验指数查看方法win8如何查看windows体验指数_Win8体验指数查看方法win8如何查看windows体验指数_Win8体验指数查看方法win8如何查看windows体验指数_Win8体验指数查看方法

    1、可通过控制面板或运行命令查看Windows体验指数。首先在控制面板中进入“系统和安全”→“操作中心”→“维护”→“查看性能信息”,即可查看总分及各硬件子分数;或使用“Win+R”输入“shell:games”打开游戏文件夹,右键空白处选择“属性”,直接查看Windows体验指数的基准分数和各项子…

    2026年9月27日 • 用户投稿
    100
  • 豆包AI如何实现智能排版 豆包AI文档自动格式化功能

    豆包AI提供的智能排版功能,能够显著提升文档处理效率。本文将详细介绍如何利用豆包AI的文档自动格式化能力,解决文档排版耗时的问题。我们将逐步解析使用该功能的过程,包括如何启用、输入内容以及完成格式化,以便用户能够轻松掌握并应用。 ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 …

    2026年9月27日
    100
  • VSCode如何实现代码片段云端同步 VSCode代码片段跨设备同步方案

    vscode实现代码片段云端同步的核心是将代码片段存储于云端并通过扩展或服务在多设备间同步;2. 可通过settings sync扩展结合github gist同步设置与代码片段;3. 可将代码片段文件夹置于dropbox、google drive等云存储服务中实现自动同步;4. 可使用git私有仓…

    2026年9月27日
    200

发表回复

登录后才能评论
关注微信