后端开发
Go 标签描述

Excelize是Go语言编写的用于操作电子表格文档的基础库,支持XLAM/XLSM/XLSX/XLTM/XLTX等多种文档格式,高度兼容带有样式、图片(表)、透视表、切片器等复杂组件的文档,并提供流式读写支持,用于处理包含大规模数据的工作簿。可应用于各类报表平台、云计算、边缘计算等系统。 本期分享将对Excelize的2023年部分更新背后的技术点、Go1.21.0版本中XML标准库的兼容性问题,以及如何构建WebAssembly版本跨语言支持展开讨论。 大纲 Excelize2023年更新概览 Go1.21.0XML标准库中的兼容性问题与修复过程 Go构建WebAssembly版本跨语...

  gFKm3t2L7baG   2023年11月02日   61   0   0 Go

在开发Go应用程序时,处理配置是一个常见的需求。配置可能来自于配置文件、环境变量、命令行参数等等。Viper是一个强大的库,可以帮助我们处理这些配置。 什么是Viper? Viper是一个应用程序配置解决方案,用于Go应用程序。它支持JSON、TOML、YAML、HCL、envfile和Javaproperties配置文件格式。它还支持环境变量、命令行标志、远程配置系统(如etcd或Consul),并且可以直接监控配置文件的变化。 如何使用Viper? 读取配置文件 首先,我们需要告诉Viper去哪里找配置文件,以及如何读取它们。这可以通过以下代码实现: viper.SetConfigName...

  SLI5qvYxXXnE   2023年11月02日   79   0   0 Go

节省时间与精力,更高效地打造稳定可靠的Web项目:基于Go语言和Gin框架的完善Web项目骨架。无需从零开始,直接利用这个骨架,快速搭建一个功能齐全、性能优异的Web应用。充分发挥Go语言和Gin框架的优势,轻松处理高并发、大流量的请求。构建可扩展性强、易于维护的代码架构,保证项目的长期稳定运行。同时,通过集成常用功能模块和最佳实践,减少繁琐的开发工作,使您专注于业务逻辑的实现。 该骨架每个组件之间可单独使用,组件之间松耦合,高内聚,组件的实现基于其他三方依赖包的封装。目前该骨架实现了大多数的组件,比如事件,中间件,日志,配置,参数验证,命令行,定时任务等功能,目前可以满足大多数开发需求,后续...

  FFKFlglhIF59   2023年11月02日   65   0   0 Go

Go协程为并发编程提供了强大的工具,结合轻量级、高效的特点,为开发者带来了独特的编程体验。本文深入探讨了Go协程的基本原理、同步机制、高级用法及其性能与最佳实践,旨在为读者提供全面、深入的理解和应用指导。 关注公众号【TechLeadCloud】,分享互联网架构、云服务技术的全维度知识。作者拥有10+年互联网服务架构、AI产品研发经验、团队管理经验,同济本复旦硕,复旦机器人智能实验室成员,阿里云认证的资深架构师,项目管理专业人士,上亿营收AI产品研发负责人。 1.Go协程简介 Go协程(goroutine)是Go语言中的并发执行单元,它比传统的线程轻量得多,并且是Go语言并发模型中的...

  MQD0xJmbEOnQ   2023年11月02日   42   0   0 Go

什么是Prometheus Prometheus是一个开源的系统监控和警报工具,最初由SoundCloud开发,并于2012年发布为开源项目。它是一个非常强大和灵活的工具,用于监控应用程序和系统的性能,并根据预定义的规则触发警报。以下是对Prometheus的详细介绍: 特点和优势: 多维数据模型:Prometheus使用多维数据模型来存储时间序列数据。每个时间序列都由一组键值对唯一标识,这使得数据非常灵活且容易查询。 灵活的查询语言:Prometheus使用一种称为PromQL(PrometheusQueryLanguage)的查询语言,允许用户执行复杂的查询和数据分析操作。你可以使用Pr...

  SLI5qvYxXXnE   2023年11月02日   73   0   0 Go

概述 shardingdb是一个开源包,旨在为GoLevelDB增加分片和并发读写功能。它可以作为LevelDB的替代品,方便地集成到现有项目中。本博客将介绍shardingdb及其功能,并介绍如何在您的项目中使用它。 特点 分片支持:shardingdb使您能够将数据分布在多个LevelDB实例中,提高性能和可扩展性。并发读写:shardingdb支持并发读写,进一步提高性能。替代品:shardingdb可以作为LevelDB的替代品使用,对现有代码的更改最小。重分片工具:shardingdb包含一个重分片工具,允许您将数据从单个LevelDB实例迁移到多个shardingdb实例,或将新的...

  U1ca3sQibpXU   2023年11月02日   98   0   0 Go

原文在这里。 由JohanBrandhorst-Satzkorn,JulienFabre,DamianGryski,EvanPhoenix,andAchilleRoussel发布于2023年9月13日 Go1.21添加了一个新的端口,通过新的GOOS值wasip1来定位WASI预览1系统调用API。该端口建立在Go1.11引入的现有WebAssembly端口的基础上。 WebAssembly是什么 WebAssembly(Wasm)是一种最初设计用于Web的二进制指令格式。它代表了一个标准,允许开发人员在Web浏览器中以接近本机速度直接运行高性能、低级别的代码。 Go首次在1.11版本中添...

  SLI5qvYxXXnE   2023年11月02日   57   0   0 Go

本文深入探讨Go语言中的流程控制语法,包括基本的if-else条件分支、for循环、switch-case多条件分支,以及与特定数据类型相关的流程控制,如for-range循环和type-switch。文章还详细描述了goto、fallthrough等跳转语句的使用方法,通过清晰的代码示例为读者提供了直观的指导。 关注微信公众号【TechLeadCloud】,分享互联网架构、云服务技术的全维度知识。作者拥有10+年互联网服务架构、AI产品研发经验、团队管理经验,同济本复旦硕,复旦机器人智能实验室成员,阿里云认证的资深架构师,项目管理专业人士,上亿营收AI产品研发负责人。 引言 在计算...

  MQD0xJmbEOnQ   2023年11月02日   81   0   0 Go

在开发应用程序时,记录日志是一项关键的任务,以便在应用程序运行时追踪问题、监视性能和保留审计记录。Go语言提供了灵活且强大的日志记录功能,可以通过多种方式配置和使用。其中一个常用的日志记录库是github.com/natefinch/lumberjack,它提供了一个方便的方式来处理日志文件的轮换,以防止日志文件无限增长。 本文将详细介绍github.com/natefinch/lumberjack,包括其主要特点、如何使用它以及示例代码。让我们一起深入了解这个有用的Go语言日志记录库。 主要特点 github.com/natefinch/lumberjack的主要特点包括: 日志轮换:它允...

  SLI5qvYxXXnE   2023年11月02日   108   0   0 Go

本文全面探讨了Go语言中的各类运算操作符,从基础的数学和位运算到逻辑和特殊运算符。文章旨在深入解析每一种运算操作符的工作原理、应用场景和注意事项,以帮助开发者编写更高效、健壮和可读的Go代码。 简介 Go语言,作为一种现代的编程语言,不仅因为其简单易读的语法而受到欢迎,还因为它的性能和高度并发能力在云计算和分布式系统中得到了广泛的应用。虽然Go语言目标是保持简单和直观,但它依然包含了一组丰富的运算操作符,这些运算操作符为数据处理和逻辑表达提供了强大的工具。 运算操作符在任何编程语言中都起着基础但至关重要的作用。他们是构建更复杂逻辑和功能的基础“砖块”。理解这些运算操作符的工作原理,以及它...

  MQD0xJmbEOnQ   2023年11月02日   52   0   0 Go

1.引言 函数在Go语言中是属于一等公民,基于此,本文将简单介绍下Go语言中的函数类型,了解下其具体用法,为后续了解函数类型的具体用途打下基础。 2.函数类型说明 2.1什么是函数类型 在Go中,函数是一等公民,这意味着你可以直接使用函数类型,是Go语言的一种内置类型,具有以下通用形式: func(param1,param2,...)returnType 其中,param1,param2,...是函数的参数列表,returnType是函数的返回值类型。我们可以直接使用这种函数类型,声明变量、作为参数传递给其他函数,或作为函数的返回值返回。 2.2使用说明 2.2.1赋值给变量 可以将函数赋值...

  Th9zKHHz4LW9   2023年11月02日   45   0   0 Go

本篇文章深入探讨了Go语言中类型确定值、类型不确定值以及对应类型转换的知识点,后续充分解析了常量与变量及其高级用法,并举出丰富的案例。 关注公众号【TechLeadCloud】,分享互联网架构、云服务技术的全维度知识。作者拥有10+年互联网服务架构、AI产品研发经验、团队管理经验,同济本复旦硕,复旦机器人智能实验室成员,阿里云认证的资深架构师,项目管理专业人士,上亿营收AI产品研发负责人。 一、类型确定值 类型确定值是与特定数据类型明确绑定的。类型确定值在Go中占有很大一部分领域,包括但不限于常量、变量、函数返回值、结构体字段等。下面是对类型确定值的的示例: 类型确定值在变量声明中 ...

  MQD0xJmbEOnQ   2023年11月02日   35   0   0 Go

十三、对象 9.挎包创建结构体实例 【1】创建不同的包: 【2】student.go: 【3】main.go: 发现:如果结构体首字母大写的话,在其它包下可以访问但是:如果结构体的首字母小写? 解决:结构体首字母小写,跨包访问没问题:---》工厂模式 10.封装 【1】什么是封装:封装(encapsulation)就是把抽象出的字段和对字段的操作封装在一起,数据被保护在内部,程序的其它包只有通过被授权的操作方法,才能对字段进行操作。 【2】封装的好处: 隐藏实现细节 提可以对数据进行验证,保证安全合理 【3】Golang中如何实现封装: 建议将结构体、字段(属性)的首字母小写...

  KHyRtDudSAa3   2023年11月02日   60   0   0 Go

1.引言 接口在系统设计中,以及代码重构优化中,是一个不可或缺的工具,能够帮助我们写出可扩展,可维护性更强的程序。 在本文,我们将介绍什么是接口,在此基础上,通过一个例子来介绍接口的优点。但是接口也不是任何场景都可以随意使用的,我们会介绍接口使用的常见场景,同时也介绍了接口滥用可能带来的问题,以及一些接口滥用的特征,帮助我们及早发现接口滥用的情况。 2.什么是接口 接口是一种工具,在识别出系统中变化部分时,帮助从系统模块中抽取出变化的部分,从而保证系统的稳定性,可维护性和可扩展性。接口充当了一种契约或规范,规定了类或模块应该提供的方法和行为,而不关心具体的实现细节。 接口通常用于面向对象编程语...

  Th9zKHHz4LW9   2023年11月02日   40   0   0 Go

结构体(简称struct)用于创建不同数据类型的成员集合,放入一个单一的变量中。虽然数组用于将相同数据类型的多个值存储在单一变量中,但结构体用于将不同数据类型的多个值存储在单一变量中。结构体对于将数据组合在一起以创建记录非常有用。 声明结构体 要在Go中声明一个结构体,请使用type和struct关键字: 语法 type结构体名struct{ 成员1数据类型; 成员2数据类型; 成员3数据类型; ... } 示例 在这里,我们声明了一个名为Person的结构体类型,其中包含以下成员:name、age、job和salary: typePersonstruct{ namestring agein...

  YHTQQsaAg9bB   2023年11月02日   28   0   0 Go

九、错误处理 1.defer+recover机制处理异常错误 展示错误: 发现:程序中出现错误/恐慌以后,程序被中断,无法继续执行。 错误处理/捕获机制: 内置函数recover: 2.自定义错误 需要调用errors包下的New函数:函数返回error类型 3.panic 有一种情况:程序出现错误以后,后续代码就没有必要执行,想让程序中断,退出程序:借助:builtin包下内置函数:panic 十、数组 1.使用 数组定义格式:var数组名[数组大小]数据类型例如: varscores[5]int packagemain import"fmt" funcmain(){ //实...

  KHyRtDudSAa3   2023年11月02日   37   0   0 Go

函数是一组语句,可以在程序中重复使用。函数不会在页面加载时自动执行。函数将通过调用函数来执行。 创建函数 要创建(通常称为声明)一个函数,请执行以下操作: 使用func关键字。 指定函数的名称,后跟括号()。 最后,在花括号{}内添加定义函数应执行的代码。 语法 func函数名(){ //要执行的代码 } 调用函数 函数不会立即执行。它们被“保存以供以后使用”,并在调用时执行。 在下面的示例中,我们创建了一个名为"myMessage()"的函数。开括号{表示函数代码的开始,闭括号}表示函数的结束。该函数输出"Ijustgotexecuted!"。要调用函数,只需写下函数的名称,后面跟着两...

  YHTQQsaAg9bB   2023年11月02日   37   0   0 Go

关注微信公众号【TechLeadCloud】,分享互联网架构、云服务技术的全维度知识。作者拥有10+年互联网服务架构、AI产品研发经验、团队管理经验,同济本复旦硕,复旦机器人智能实验室成员,阿里云认证的资深架构师,项目管理专业人士,上亿营收AI产品研发负责人。 本文深入探讨了Go语言的内置类型系统,从布尔类型到复杂的字符串类型,旨在为开发者提供全面而详尽的指导,通过丰富的代码示例和应用场景,揭示了如何在实际项目中高效地运用这些类型。 在编程中,类型(type)可以被看作是值(value)的模板,而值则可以被看作是类型的实例。在这篇文章里,我们专注于介绍Go语言的内置(或称为预声明的)基...

  MQD0xJmbEOnQ   2023年11月02日   182   0   0 Go

五、数据类型 5.复杂数据类型 1.指针 指针就是内存地址 赋值:varptrint=&age funcmain(){ varageint=18 //&符号+变量就可以获取这个变量内存的地址 fmt.Println(&age)//0xc0000a2058 //定义一个指针变量: //var代表要声明一个变量 //ptr指针变量的名字 //ptr对应的类型是:int是一个指针类型(可以理解为指向int类型的指针) //&age就是一个地址,是ptr变量的具体的值 varptrint=&age fmt.Println(ptr) fmt.Println("p...

  KHyRtDudSAa3   2023年11月02日   71   0   0 Go

for循环用于多次执行特定的代码块,每次都可以使用不同的值。每次循环执行都称为一次迭代。for循环可以包含最多三个语句:语法 for语句1;语句2;语句3{ //每次迭代要执行的代码 } 语句1:初始化循环计数器的值。 语句2:对每次循环迭代进行评估。如果评估为TRUE,则继续循环。如果评估为FALSE,则结束循环。 语句3:增加循环计数器的值。 注意:这些语句不需要作为循环的参数存在,但它们需要以某种形式出现在代码中。 for循环示例 示例1 以下示例将打印从0到4的数字: packagemain import( "fmt" ) funcmain(){ fori:=0;i<5...

  YHTQQsaAg9bB   2023年11月02日   34   0   0 Go