Go os.NewFile函数:新建文件

Go语言中创建文件:os.NewFile详解
本文介绍了Go的os包中的NewFile函数,用于新建文件但不保存。函数返回os.File类型的指针,提供了语法、参数及使用示例,并强调该函数不会实际创建文件。

目录

描述

语法和参数

使用示例

注意事项


 

描述

NewFile函数是os包用于新建文件的函数。NewFile并不是真正创建了一个文件,而是新建了文件但并不保存,返回新建后文件的指针。

 

语法和参数

函数签名

func NewFile(fd uintptr, name string) *File
参数名称 含义
fd 文件描述符
name 文件名

返回值

os.NewFile函数返回os.File类型的指针。

 

使用示例

os.NewFile函数返回了fun.go文件的指针。(文件没有被创建)

package main

import (
	"os"
)

func main() {
	f
// ExportTaskDetailToExcel 将 TaskDetail 结果导出为 Excel 并返回文件流(可用于 HTTP 下载) func (impl *nearStatServiceImpl) ExportTaskDetailToExcel(param *req.NearInstanceTaskDetailReq) (io.ReadSeeker, string, error) { // 先获取原始数据 result, svcErr := impl.TaskDetail(param) if svcErr != nil { return nil, "", fmt.Errorf("failed to load task detail: %v", svcErr) } // 创建 Excel 文件 f := excelize.NewFile() defer f.Close() // 创建工作表 sheetName := "SQL指纹统计" index, _ := f.NewSheet(sheetName) f.SetActiveSheet(index) // 设置标题行(可根据 res.NearSqlFpStat 字段调整) headers := []string{ "SQL指纹", "总执行次数", "总执行时间(μs)", "平均执行时间(μs)", "最大执行时间(μs)", "最小执行时间(μs)", } headerCols := []string{"A", "B", "C", "D", "E", "F"} for i, col := range headerCols { cell := fmt.Sprintf("%s1", col) f.SetCellValue(sheetName, cell, headers[i]) } // 填充数据 for i, item := range result.SqlFpStatList { row := i + 2 // 第二行开始写入 f.SetCellValue(sheetName, fmt.Sprintf("A%d", row), item.SqlFp) f.SetCellValue(sheetName, fmt.Sprintf("B%d", row), item.TotalNum) f.SetCellValue(sheetName, fmt.Sprintf("C%d", row), item.TotalExeTime) f.SetCellValue(sheetName, fmt.Sprintf("D%d", row), item.AvgExeTime) f.SetCellValue(sheetName, fmt.Sprintf("E%d", row), item.MaxExeTime) f.SetCellValue(sheetName, fmt.Sprintf("F%d", row), item.MinExeTime) } // 可选:自动列宽(Excelize 不直接支持,需估算) _ = f.SetColWidth(sheetName, "A", "A", 50) // SQL指纹列宽一些 _ = f.SetColWidth(sheetName, "B", "F", 15) // 创建加粗样式的 Style ID boldStyle, err := f.NewStyle(&excelize.Style{ Font: &excelize.Font{Bold: true}, }) if err != nil { logger.Errorf("创建加粗样式失败: %v", err) return nil, "", err } // 使用 style ID 设置单元格样式 err = f.SetCellStyle(sheetName, "A1", fmt.Sprintf("%s1", headerCols[len(headerCols)-1]), boldStyle) if err != nil { logger.Errorf("设置标题行加粗失败: %v", err) return nil, "", err } // 创建一个 buffer 来接收 Excel 数据 var buf bytes.Buffer // 使用 Write(io.Writer) 方式写入 buffer err = f.Write(&buf) if err != nil { return nil, "", fmt.Errorf("failed to write excel data: %v", err) } // 从 buffer 获取字节流 fileBytes := buf.Bytes() // 使用 bytes.NewReader 实现 io.ReadSeeker reader := bytes.NewReader(fileBytes) // 构造文件名(可包含参数信息) fileName := fmt.Sprintf("延时分析任务_%s_慢日志统计_%d.xlsx", param.Id, time.Now().Unix()) return reader, fileName, nil }
最新发布
11-14
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值