Golang标准库fmt深入解析与应用技巧

news2024/11/13 8:50:16

Golang标准库fmt深入解析与应用技巧

    • 前言
    • fmt包的基本使用
      • 打印与格式化输出函数
        • Print系列函数
        • 格式化字符串
      • 格式化输入函数
      • 小结
    • 字符串格式化
      • 基本类型的格式化输出
      • 自定义类型的格式化输出
      • 控制格式化输出的宽度和精度
      • 小结
    • 错误处理与fmt
      • 使用fmt.Errorf生成错误信息
      • fmt包与错误处理的最佳实践
      • 小结
    • 日志记录与fmt
      • fmt包在日志记录中的应用
      • 结合log包使用fmt进行高级日志处理
      • 小结
    • fmt与IO
      • fmt包与io.Reader/io.Writer接口的结合使用
      • 自定义输出的实现方法
      • 小结
    • 实战案例
      • 实战案例1:构建一个命令行工具
      • 实战案例2:实现日志记录系统
      • 实战案例3:数据输入输出的格式化处理
      • 小结
    • 常见问题解答
      • 问题1:如何在`fmt.Printf`中正确使用宽度和精度标志?
      • 问题2:`fmt.Println`和`fmt.Printf`有什么区别?
      • 问题3:如何使用`fmt`包读取输入中的一整行?
      • 问题4:`fmt.Sprint`、`fmt.Sprintf`、`fmt.Sprintln`有什么区别?
      • 问题5:如何使`fmt.Printf`输出带颜色的文本?
      • 小结
    • 总结
      • 关键点回顾
      • 结语

在这里插入图片描述

前言

在Go语言的众多标准库中,fmt库以其强大的功能和灵活性,在日常的开发工作中占据着不可或缺的地位。无论是输出日志信息,还是格式化字符串,fmt库都提供了一系列简洁、高效的接口,使得处理字符串和其他类型的数据变得既简单又直观。本文旨在深入探讨fmt库的使用方法和技巧,通过实例驱动的方式,帮助开发者掌握其强大的功能,从而在实际开发中能够更加得心应手地使用Go语言。

fmt库的设计哲学体现了Go语言简洁高效的特点。它不仅支持基本数据类型的格式化输出,还能够处理复杂的自定义类型,让开发者能够以极其灵活的方式控制输出格式。此外,fmt库还提供了一套简单的输入函数,使得从标准输入读取数据变得异常轻松。正是这些特性,使得fmt库成为了Go语言中最为频繁使用的标准库之一。

本文针对有一定Go语言基础的中级及高级开发者,旨在通过详细的示例和解析,深入讲解fmt库的高级用法和实际应用技巧。不仅仅局限于基础的打印和格式化功能,我们还将探讨如何在错误处理、日志记录、以及与IO操作等更广泛的场景中,有效地利用fmt库提升代码的质量和工作效率。无论你是希望巩固fmt库的使用方法,还是寻找解决特定问题的方案,相信本文都能为你提供宝贵的参考。

fmt包的基本使用

在Go语言的标准库中,fmt是一个实现了格式化I/O函数的包,主要用于格式化输出和输入。它为我们提供了丰富的函数来控制数据的格式化输出到标准输出设备,如终端,或从标准输入设备读取数据。这些函数的设计旨在简化常见的输出和输入操作,同时保持语法的简洁性和高效性。接下来,我们将探讨fmt包中最常用的几类函数,并通过实例来演示它们的具体用法。

打印与格式化输出函数

Print系列函数
  • Print: 直接输出内容到标准输出。
  • Printf: 支持格式化的输出,可以根据格式化字符串来输出内容。
  • Println: 在输出内容的末尾添加换行符。

示例:

fmt.Print("Hello, Go.")
fmt.Printf("Year: %d", 2024)
fmt.Println("Hello, world!")

这些函数直接将内容输出到标准输出设备(通常是终端)。Printf函数特别有用,因为它允许我们通过格式化字符串来精确控制输出内容的格式,是输出复杂数据和构建用户友好输出的重要工具。

格式化字符串

格式化字符串使用占位符来指定如何格式化输出的值。例如,%d用于整数,%s用于字符串,%f用于浮点数等。这些占位符为输出提供了极高的灵活性和控制力。

格式化输入函数

  • Scan: 从标准输入读取。
  • Scanf: 根据格式化字符串从标准输入读取。
  • Scanln: 读取标准输入的一行。

示例:

var name string
var age int
fmt.Scan(&name)
fmt.Scanf("%d", &age)
fmt.Scanln(&name)

这些函数用于从标准输入读取数据,并将读取的数据存储到指定的变量中。ScanfPrintf类似,允许根据格式化字符串解析输入数据,这在需要从用户那里读取特定格式的数据时非常有用。

小结

fmt包的打印与格式化输出函数为Go语言开发者提供了强大而灵活的工具,以简洁、高效的方式处理标准输入输出操作。无论是简单的数据输出,还是复杂的格式化需求,fmt都能够轻松应对。掌握这些基础函数,是每个Go语言开发者的必修课。

字符串格式化

字符串格式化是fmt包中一个极其重要的功能,它允许开发者按照指定的格式输出字符串、数字、或者其他数据类型。这种能力在处理日志、生成用户友好的消息以及在用户界面显示数据时尤为重要。接下来,我们将详细探讨如何使用fmt包进行有效的字符串格式化。

基本类型的格式化输出

Go语言中的基本数据类型包括整数、浮点数、布尔值等,fmt包提供了多种格式化占位符来支持这些类型的格式化输出。

示例:

var intVal int = 10
var floatVal float64 = 3.14159
var strVal string = "Go"
var boolVal bool = true

fmt.Printf("整数:%d\n", intVal)
fmt.Printf("浮点数:%.2f\n", floatVal)
fmt.Printf("字符串:%s\n", strVal)
fmt.Printf("布尔值:%t\n", boolVal)

这些示例展示了如何使用Printf函数和不同的格式化占位符来格式化并输出各种基本数据类型。

自定义类型的格式化输出

在Go语言中,你可以定义自己的类型,包括结构体。为了能够格式化输出自定义类型的值,你可以为你的类型实现String方法,这样fmt包就会自动使用这个方法来格式化该类型的值。

示例:

type Point struct {
    X, Y int
}

func (p Point) String() string {
    return fmt.Sprintf("(%d, %d)", p.X, p.Y)
}

var p Point = Point{1, 2}
fmt.Println(p)

在这个例子中,我们为Point类型定义了String方法,当我们尝试使用fmt的打印函数输出Point类型的值时,fmt会自动调用我们定义的String方法。

控制格式化输出的宽度和精度

在某些情况下,你可能需要控制输出的宽度和精度,特别是当处理浮点数或对齐文本时。fmt提供了格式化占位符的扩展语法来支持这些需求。

示例:

fmt.Printf("宽度6:%6d\n", 12)
fmt.Printf("宽度6,填充0:%06d\n", 12)
fmt.Printf("浮点数,默认精度:%f\n", 3.14159)
fmt.Printf("浮点数,精度2:%.2f\n", 3.14159)
fmt.Printf("左对齐,宽度8:%-8s|\n", "go")

通过这些示例,我们可以看到如何控制输出的宽度、填充方式以及数字的精度。这些功能在生成报表或构建需要精确对齐的文本输出时特别有用。

小结

通过掌握fmt包的字符串格式化功能,Go开发者可以灵活地控制数据的输出格式。无论是基本数据类型的格式化,自定义类型的美观打印,还是对输出宽度和精度的精确控制,fmt都提供了强大的支持。继续深入学习和实践这些技巧,将有助于提高你的Go语言编码效率和输出质量。

错误处理与fmt

在Go语言中,错误处理是一项基础且重要的任务。fmt包提供了便捷的工具来生成格式化的错误信息,这使得错误报告既清晰又易于理解。通过使用fmt.Errorffmt的格式化功能,开发者可以创建富有信息量的错误消息,帮助定位问题所在。

使用fmt.Errorf生成错误信息

fmt.Errorf函数允许开发者按照指定的格式生成错误信息。这种方式非常适合于需要在错误消息中包含变量值的场景。

示例:

func Divide(a, b float64) (float64, error) {
    if b == 0 {
        return 0, fmt.Errorf("除法错误:被除数不能为0")
    }
    return a / b, nil
}

result, err := Divide(10, 0)
if err != nil {
    fmt.Println(err)
}

在这个示例中,当尝试执行除零操作时,Divide函数将返回一个通过fmt.Errorf生成的错误,其中包含了导致错误的具体原因。

fmt包与错误处理的最佳实践

虽然fmt.Errorf是生成带有格式化信息的错误的简便方法,但在实际开发中,还需要遵循一些最佳实践来优化错误处理:

  • 清晰的错误信息:使用fmt.Errorf生成的错误信息应该简洁明了,足以让开发者或用户理解错误的原因。
  • 错误信息的国际化:在面向多语言用户的应用中,考虑使用错误码配合错误信息的国际化。
  • 避免过度使用:对于可预见的错误情况,考虑使用预定义的错误变量,而不是在每个错误发生处生成新的错误对象。

小结

通过fmt包在错误处理中的应用,Go开发者可以更加方便地生成和管理错误信息。fmt.Errorf函数提供了一种灵活的方式来创建含有格式化内容的错误,使得错误报告更加清晰、准确。遵循错误处理的最佳实践,可以进一步提高代码的可维护性和用户体验。

日志记录与fmt

日志记录是软件开发中的一个关键环节,它帮助开发者监控应用状态,诊断问题,并分析系统性能。fmt包在日志记录中的应用,通过其强大的格式化能力,为生成清晰、信息丰富的日志提供了便捷的手段。结合Go语言的log包,fmt能够帮助开发者构建一个既高效又易于管理的日志系统。

fmt包在日志记录中的应用

在许多情况下,简单的打印语句(例如fmt.Println)足以用于开发阶段的日志记录。但是,为了实现更高级的日志管理功能,如日志级别控制、日志消息的格式化输出、以及将日志写入不同的输出目标,开发者通常会选择结合使用fmtlog包。

示例:

import (
    "fmt"
    "log"
    "os"
)

func init() {
    // 设置log的输出文件和格式
    logFile, err := os.OpenFile("app.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)
    if err != nil {
        log.Fatalf("打开日志文件失败:%v", err)
    }
    log.SetOutput(logFile)
    log.SetFlags(log.Ldate | log.Ltime | log.Lshortfile)
}

func main() {
    log.Println("程序启动")
    
    // 使用fmt进行复杂的格式化操作,然后记录日志
    userID := 42
    userName := "张三"
    logMessage := fmt.Sprintf("用户登录:id=%d, name=%s", userID, userName)
    log.Println(logMessage)
    
    log.Println("程序结束")
}

在这个例子中,我们先设置了日志文件和日志格式,然后通过fmt.Sprintf创建了一个复杂的格式化日志消息,并使用log.Println将其写入日志文件。

结合log包使用fmt进行高级日志处理

虽然log包本身支持基本的消息格式化,但fmt包的格式化功能更为丰富和灵活。当需要在日志消息中包含复杂的数据结构或进行特殊的格式控制时,可以先使用fmt包进行格式化,然后再将格式化后的字符串传递给log包进行记录。

这种方法不仅能够提升日志消息的可读性和信息量,还能够根据需要轻松地调整日志格式,使日志系统更加灵活和强大。

小结

通过有效地结合fmtlog包,Go开发者可以构建出功能强大、灵活易用的日志系统。fmt包的格式化功能,为生成丰富的日志内容提供了强大的支持,使得日志不仅仅是问题诊断的工具,更是应用程序状态的清晰记录。掌握如何高效地使用fmt进行日志记录,对于提高应用的可维护性和可监控性至关重要。

fmt与IO

在Go语言中,输入输出(IO)操作是日常编程活动的一个基本方面,它涉及到数据的读取和写入。fmt包不仅提供了对标凑输入输出的支持,还允许与更广泛的IO接口一起工作,比如io.Readerio.Writer。这一特性使得fmt包成为在进行文件操作、网络通信等需要格式化输入输出的场合中,一个极其强大的工具。

fmt包与io.Reader/io.Writer接口的结合使用

Go语言的设计哲学之一是通过接口(interfaces)来提供灵活的抽象。io.Readerio.Writer是两个广泛使用的接口,分别用于表示数据的读取源和写入目标。fmt包通过提供可以接受这些接口作为参数的函数,使得它能够轻松地与不同的数据源和目标一起工作。

示例:

import (
    "fmt"
    "os"
)

func main() {
    // 使用fmt.Fprintf向文件写入内容
    file, err := os.Create("example.txt")
    if err != nil {
        panic(err)
    }
    defer file.Close()
    fmt.Fprintf(file, "Hello, %s!", "world")

    // 使用fmt.Fscanf从文件读取内容
    var message string
    file, err = os.Open("example.txt")
    if err != nil {
        panic(err)
    }
    defer file.Close()
    fmt.Fscanf(file, "Hello, %s!", &message)
    fmt.Println(message)
}

在这个示例中,我们使用fmt.Fprintf将格式化的字符串写入一个文件,并使用fmt.Fscanf从文件中读取格式化的数据。这展示了如何将fmt包与文件IO操作结合使用,但同样的原理也适用于网络IO或任何实现了io.Writerio.Reader接口的类型。

自定义输出的实现方法

通过实现io.Writer接口,开发者可以创建自定义的日志记录器、数据缓冲区或其他任何输出目标。同样,实现io.Reader接口可以创建自定义的数据源。这种方式提供了极高的灵活性,使得开发者能够根据应用程序的具体需求,设计和实现特定的数据处理逻辑。

示例:

假设我们需要一个日志记录器,它不仅向文件中写入日志,还要在每条日志前自动添加时间戳。我们可以通过实现io.Writer接口来实现这一功能:

type TimestampLogger struct {
    Writer io.Writer
}

func (t TimestampLogger) Write(p []byte) (n int, err error) {
    return t.Writer.Write([]byte(time.Now().Format("2006-01-02 15:04:05") + " " + string(p)))
}

// 使用TimestampLogger
logger := &TimestampLogger{Writer: os.Stdout}
fmt.Fprintln(logger, "这是一条日志信息")

在这个示例中,TimestampLogger通过包装任何io.Writer对象(在这里是标准输出),添加了自定义的行为——自动在每条消息前添加时间戳。

小结

fmt包与Go语言的IO接口结合的使用,展示了Go语言强大的抽象和灵活性。无论是进行文件操作、网络通信还是创建自定义的数据处理逻辑,fmt包都提供了简洁高效的解决方案。通过掌握这些技术,开发者可以在各种应用场景中有效地进行数据的格式化输入输出。

实战案例

在本节中,我们将通过几个实战案例来探索fmt包在Go语言开发中的应用。这些案例将涵盖不同的使用场景,从而帮助读者更深入地理解如何在实际开发工作中有效利用fmt包的功能。

实战案例1:构建一个命令行工具

命令行工具是软件开发中常见的项目类型之一。利用fmt包的输入输出功能,我们可以创建一个用户友好的命令行界面。

需求:

  • 创建一个简单的命令行计算器,支持加、减、乘、除四种操作。
  • 用户输入两个数和一个操作符,程序输出计算结果。

示例代码:

package main

import (
	"fmt"
	"os"
)

func main() {
	var num1, num2 float64
	var operator string

	fmt.Println("请输入两个数字和操作符(+、-、*、/),以空格分隔:")
	if _, err := fmt.Scanf("%f %f %s", &num1, &num2, &operator); err != nil {
		fmt.Fprintf(os.Stderr, "输入错误:%v\n", err)
		return
	}

	switch operator {
	case "+":
		fmt.Printf("结果:%.2f\n", num1+num2)
	case "-":
		fmt.Printf("结果:%.2f\n", num1-num2)
	case "*":
		fmt.Printf("结果:%.2f\n", num1*num2)
	case "/":
		if num2 == 0 {
			fmt.Println("错误:除数不能为0")
			return
		}
		fmt.Printf("结果:%.2f\n", num1/num2)
	default:
		fmt.Println("未知的操作符:", operator)
	}
}

实战案例2:实现日志记录系统

利用fmt包的格式化输出功能,可以轻松实现一个简单的日志记录系统,该系统能够将日志信息格式化后输出到不同的目标中。

需求:

  • 实现一个日志记录器,支持不同级别的日志输出(如信息、警告、错误)。
  • 支持将日志输出到控制台和文件。

示例代码:

package main

import (
	"fmt"
	"log"
	"os"
)

func main() {
	logFile, err := os.OpenFile("app.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)
	if err != nil {
		log.Fatal("打开日志文件失败:", err)
	}
	defer logFile.Close()

	logger := log.New(logFile, "INFO: ", log.Ldate|log.Ltime|log.Lshortfile)
	logger.Println("这是一条信息级别的日志")

	fmt.Println("日志记录完成")
}

实战案例3:数据输入输出的格式化处理

在处理数据导入导出的场景中,fmt包可以帮助我们实现数据的格式化输入输出,以便于数据的交换和存储。

需求:

  • 从CSV文件中读取数据,格式化后输出到控制台。
  • 将用户输入的数据格式化后存储到CSV文件中。

示例代码:

此案例涉及到文件操作和字符串处理,建议结合encoding/csv标准库使用,本文聚焦于fmt包的应用,故略去具体实现代码。

小结

通过这些实战案例,我们可以看到fmt包在实际开发中的广泛应用。无论是构建命令行工具、实现日志记录系统,还是进行数据的格式化处理,fmt包都提供了强大的支持。熟练掌握fmt包的使用,可以有效提高开发效率,同时使程序的输出更加清晰和友好。

常见问题解答

在使用fmt包过程中,开发者可能会遇到各种问题或疑惑。本节旨在解答一些使用fmt包时常见的问题,帮助开发者更有效地利用这个包。

问题1:如何在fmt.Printf中正确使用宽度和精度标志?

在使用fmt.Printf等函数进行格式化输出时,可以通过指定宽度和精度来控制输出格式。宽度指定了最小输出字符数,如果实际字符数少于宽度,则根据标志进行填充。精度通常用于控制浮点数的小数点后位数,或者字符串的最大输出长度。

示例:

fmt.Printf("%8d\n", 123)  // 指定宽度为8,输出"     123"
fmt.Printf("%8.2f\n", 3.1415926535)  // 指定宽度为8,精度为2,输出"    3.14"
fmt.Printf("%-8s\n", "Go")  // 指定宽度为8,左对齐,输出"Go      "

问题2:fmt.Printlnfmt.Printf有什么区别?

fmt.Printlnfmt.Printf都用于输出,但主要区别在于fmt.Printf允许使用格式化字符串来控制输出格式,而fmt.Println则简单地输出每个参数的默认格式,并在参数之间添加空格,最后添加换行符。

问题3:如何使用fmt包读取输入中的一整行?

可以使用fmt.Scanlnbufio.Reader来读取输入中的一整行。fmt.Scanln在遇到换行符时停止读取,而bufio.Reader提供了更灵活的读取方法。

示例使用fmt.Scanln:

var input string
fmt.Println("请输入一行文本:")
fmt.Scanln(&input)
fmt.Println("你输入的是:", input)

问题4:fmt.Sprintfmt.Sprintffmt.Sprintln有什么区别?

这三个函数都用于生成格式化的字符串,而不是直接输出到标准输出。fmt.Sprint简单地将所有输入参数转换为字符串并连接起来;fmt.Sprintf允许使用格式化字符串,是最灵活的一个;fmt.Sprintln类似于fmt.Sprint,但它会在参数之间添加空格,并在最后添加换行符。

问题5:如何使fmt.Printf输出带颜色的文本?

在支持ANSI转义序列的终端中,可以通过在格式化字符串中包含ANSI颜色代码来实现彩色文本输出。这种方法的兼容性取决于终端的支持。

示例:

fmt.Printf("\033[31m这是红色文本\033[0m\n")

小结

通过这些常见问题的解答,希望能够帮助开发者更加深入地理解fmt包的使用细节和技巧。fmt包是Go语言标准库中非常强大的一部分,掌握它能够让开发者在日常编程中更加得心应手。如有更多问题或需求,建议查阅官方文档或相关社区资源,以获得更深入的帮助和指导。

总结

经过深入地探讨和实践,我们已经全面了解了Go语言的fmt标准库及其在实际开发中的应用。从基本的打印和格式化输出,到在错误处理、日志记录以及与IO操作中的高级用法,fmt库展现了其作为Go语言标准库中不可或缺部分的强大功能和灵活性。此外,通过解答一些常见问题,我们进一步巩固了对fmt包使用细节的理解,为开发者在遇到相关挑战时提供了参考和指导。

关键点回顾

  • 基础使用fmt包的Print系列函数提供了简单直接的方式来进行标准输出,而Scan系列函数则用于输入。这些是进行日常开发时最频繁使用的功能。
  • 字符串格式化:通过一系列的格式化占位符,fmt允许开发者以几乎无限的方式来控制输出的格式,这在生成报告或构建用户友好的输出时特别有用。
  • 错误处理fmt.Errorf函数提供了一种灵活的方式来创建带有格式化信息的错误,使错误报告更加清晰和有用。
  • 日志记录:结合log包和fmt包可以创建功能丰富、格式化的日志记录系统,助力开发者有效地追踪应用程序的运行状态和问题诊断。
  • 与IO的整合fmt包通过支持io.Readerio.Writer接口,提高了与文件、网络及其他数据流的交互效率和灵活性。
  • 实战案例:通过实际案例的学习,我们看到了fmt包在构建命令行工具、实现日志系统、以及数据处理等方面的实际应用,体现了理论与实践相结合的重要性。

结语

fmt库是每位Go语言开发者的基础工具箱中的重要工具。掌握它的使用不仅能够提高编程效率,还能在处理日常编程任务时,如格式化输出、错误报告和日志记录等,提供极大的便利。随着对Go语言及其标准库更深入的理解和应用,开发者将能够更加自信地构建高效、可靠的Go应用程序。

希望本文能为你在使用Go语言的fmt库方面提供有价值的参考和指导。随着不断的学习和实践,相信你会在Go语言的旅途上越走越远,发现更多的可能性。继续探索,继续前进,Go语言的世界等你来发现。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1535703.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vue/vite添加地图

最简单的方式&#xff0c;不论vue2、vue3、vite均适用&#xff0c;例如以高德为例&#xff1a; index.html 引入 <scriptsrc"https://webapi.amap.com/maps?v1.4.15&key您的key&pluginAMap.ToolBar,AMap.MouseTool,AMap.DistrictSearch,AMap.ControlBar&quo…

filezilla客户端的应用以及ftplftpwget的用法

filezilla的应用 用户的配置查看上一篇文章FTP3种用户的配置 进入filezilla软件测试 用yy用户登录发现可以上传下载创建删除 再用cc用户登录发现不能上传不能删除不能创建只能下载 ftp&lftp&wget客户端的应用 以命令行的方式连接ftp&#xff0c;一般只会用到上…

MAC废纸篓删掉还能复原吗 MAC废纸篓倾倒掉的文件怎么恢复 删除的东西在哪里可以找回来 怎么找回已删除的文件

MAC系统中的废纸篓&#xff08;Trash&#xff09;通常指用来临时存放用户即将丢弃的文件的地方。MAC系统的废纸篓功能相当于Windows系统的垃圾回收站&#xff0c;通过废纸篓删除的文件&#xff0c;一般是无法从系统中操作还原。那么&#xff0c;MAC废纸篓删掉还能复原吗&#x…

Linux系统(四)- 进程初识 | 环境变量 | 进程地址空间

~~~~ 前言冯诺依曼体系结构&#xff08;重要&#xff09;总览CPU工作方式什么是指令集&#xff1f;CPU为什么只和内存打交道&#xff08;数据交换&#xff09;&#xff1f;木桶效应&#xff1a;在数据层面的结论程序运行为什么要加载到内存&#xff1f; 进一步理解计算机体系结…

应用APM-如何配置Prometheus + Grafana监控springboot应用

文章目录 概述在Spring Boot应用中集成Micrometerspringboot配置修改 Docker安装Prometheus和Grafanaprometheus配置grafana配置启动Prometheus和Grafana在Grafana中配置数据源创建Grafana仪表盘配置Grafana告警&#xff08;可选&#xff09;监控和分析 概述 配置Prometheus和…

NASA数据集——2017 年来自 Arctic-CAP 的大气中 CO、CO2 和 CH4 浓度剖面图

简介 ABoVE: Atmospheric Profiles of CO, CO2 and CH4 Concentrations from Arctic-CAP, 2017 文件修订日期&#xff1a;2019-05-01 数据集版本: 1 数据集摘要 本数据集提供了 2017 年 4 月至 11 月北极碳飞机剖面&#xff08;Arctic-CAP&#xff09;月度采样活动期间阿拉…

MIT的研究人员最近开发了一种名为“FeatUp”的新算法,这一突破性技术为计算机视觉领域带来了高分辨率的洞察力

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

【冥想X理工科思维】场景10:长期项目的焦虑和压力

冥想音频合集&#xff1a;职场解压冥想音频 压力场景&#xff1a; 在长期项目中&#xff0c;如何定期冥想帮我保持耐心和持久性&#xff1f; 点击看大图&#xff1a; 详细说明&#xff1a;通过这个冥想流程&#xff0c;你可以帮助自己在长期项目中保持耐心、坚持和放松的状态。…

SAP前台处理:物料主数据创建<MM01>之会计视图

一、背景&#xff1a; 终于来到了物料主数据&#xff0c;我觉得物料账是SAP最重要的一项发明&#xff0c;也一直是SAP的一项重要优势&#xff0c;物料账记录了一个个物料的生生不息&#xff1b; 本章主要讲解物料主数据和财务相关的主要内容&#xff1a;这里特别提示由于作者…

类和对象-4

文章目录 前言const成员函数取地址及const取地址操作符重载构造函数续explicit static成员友元内部类匿名对象 前言 在前面的文章中&#xff0c;我们了解到了类的四个默认成员函数&#xff1a;构造、析构、拷贝构造和赋值重载。接下来我们会继续学习剩下的两个默认成员函数以及…

CAD建筑版2024 安装教程

CAD建筑版是一种专门用于建筑设计和绘图的CAD软件版本。它提供了专业的建筑设计工具和功能&#xff0c;帮助建筑师、设计师和工程师在建筑领域进行快速、准确和高效的设计工作。 CAD建筑版具备建筑相关的库和元素&#xff0c;用户可以方便地使用预定义的建筑符号和元素进行建筑…

二叉树|104.二叉树的最大深度 111.二叉树的最小深度

104.二叉树的最大深度 力扣题目链接 class solution { public:int getdepth(TreeNode* node) {if (node NULL) return 0;int leftdepth getdepth(node->left); // 左int rightdepth getdepth(node->right); // 右int depth 1 max(leftdepth, rightdepth…

嵌入式-4种经典继电器驱动电路-单片机IO端口/三极管/达林顿管/嵌套连接

文章目录 一&#xff1a;继电器原理二&#xff1a;单片机驱动电路三&#xff1a;经典继电器驱动电路方案3.1 继电器驱动电路方案一&#xff1a;I/O端口灌电流方式的直接连接3.1.1 方案一的继电器特性要求3.1.2 方案一可能会损坏I/O口 3.2 继电器驱动电路方案二&#xff1a;三极…

记录一次基于AES加密的恶意软件逆向分析和解密过程(含文件)

导入(Imports)和字符串 首先,用IDA或Ghidra加载文件test.dat,文件为64位文件 IDA点击View==>Open subviews==>Imports,查看导入信息 Ghidra可以直接看到 可以看到,导入函数有: __printf_chk, malloc, __isoc99_sscanf, putchar, __stack_chk_fail, __cxa_fina…

安捷伦Agilent E8361C网络分析仪

181/2461/8938产品概述&#xff1a; 安捷伦e 8361 c网络分析仪提供通用网络分析&#xff0c;可选软件和/或硬件为您的应用定制-如多端口、脉冲射频等。 安捷伦E8361C网络分析仪的显示窗口数量不限&#xff0c;可以调整大小和重新排列&#xff0c;每个窗口最多有24条活动轨迹和…

CSS 脱离标准文档流 浮动

浮动 在标准流当中&#xff0c;元素或者标签在页面上摆放的时候会出现不如意的地方。要想解决这些问题可以采用脱离标准流的方式来进行解决这些问题&#xff0c;脱离标准流也称为脱离文档流。 脱离标准流的解决方式有三种&#xff0c;一种是浮动&#xff0c;另外一种是固定定位…

【Flask】Flask项目结构初识

1.前提准备 Python版本 # python 3.8.0 # 查看Python版本 python --version 安装第三方 Flask pip install flask # 如果安装失败&#xff0c;可以使用 -i&#xff0c;指定使用国内镜像源 # 清华镜像源&#xff1a;https://pypi.tuna.tsinghua.edu.cn/simple/ 检查 Flask 是…

大数据分析-基于Python的电影票房信息数据的爬取及分析

概要 现如今&#xff0c;人民群众对物质生活水平的要求已不再局限于衣食住行&#xff0c;对于精神文化有了更多的需求。电影在我国越来越受欢迎&#xff0c;电影业的发展越来越迅猛&#xff0c;为了充分利用互联网技术的发展&#xff0c;掌握电影业的态势&#xff0c;对信息进行…

【3GPP】【核心网】【4G】4G手机接入过程,手机附着过程(超详细)

1. 4G手机接入过程&#xff0c;手机附着过程 附着&#xff08;Attach&#xff09;&#xff1a; 终端在PLMN中注册&#xff0c;从而建立自己的档案&#xff0c;即终端上下文 进行附着的三种情况&#xff1a; ①终端开机后的附着&#xff0c;初始附着 ②终端从覆盖盲区返回到…

全栈的自我修养 ———— uniapp中加密方法

直接按部就班一步一步来 一、首先创建一个js文件填入AES二、创建加密解密方法三、测试 一、首先创建一个js文件填入AES 直接复制以下内容 /* CryptoJS v3.1.2 code.google.com/p/crypto-js (c) 2009-2013 by Jeff Mott. All rights reserved. code.google.com/p/crypto-js/wi…