返回顶部
首页 > 资讯 > 精选 >如何使用Go1.16的新特性
  • 413
分享到

如何使用Go1.16的新特性

2023-06-15 18:06:11 413人浏览 独家记忆
摘要

本篇内容介绍了“如何使用Go1.16的新特性”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!无法将静态资源编译打包进二进制文件的话,通常会有两

本篇内容介绍了“如何使用Go1.16的新特性”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

无法将静态资源编译打包进二进制文件的话,通常会有两种解决方法:

  • 第一种是识别这类静态资源,是否需要跟着程序走。

  • 第二种就是考虑将其打包进二进制文件中。

第二种情况的话,Go 以前是不支持的,大家就会去借助各种花式的开源库,例如:go-bindata/go-bindata 来实现。

但从在 Go1.16 起,Go 语言自身正式支持了该项特性,今天我们将通过这篇文章快速了解和学习这项特性。

基本使用

演示代码:

import _ "embed"  //go:embed hello.txt var s string  func main() {  print(s) }

我们首先在对应的目录下创建了 hello.txt 文件,并且写入文本内容 “吃煎鱼”。

在代码中编写了最为核心的 //go:embed hello.txt 注解。注解的格式很简单,就是 go:embed  指令声明,外加读取的内容的地址,可支持相对和绝对路径。

输出结果:

吃煎鱼

读取到静态文件中的内容后自动赋值给了变量 s,并且在主函数中成功输出。

而针对其他的基础类型,Go embed 也是支持的:

//go:embed hello.txt var s string  //go:embed hello.txt var b []byte  //go:embed hello.txt var f embed.FS  func main() {  print(s)  print(string(b))   data, _ := f.ReadFile("hello.txt")  print(string(data)) }

输出结果:

吃煎鱼 吃煎鱼 吃煎鱼

我们同时在一个代码文件中进行了多个 embed 的注解声明。

并且针对 string、slice、byte、fs 等多种类型进行了打包,也不需要过多的处理,非常便利。

拓展用法

除去基本用法完,embed 本身在指令上也支持多种变形:

//go:embed hello1.txt hello2.txt var f embed.FS  func main() {  data1, _ := f.ReadFile("hello1.txt")  fmt.Println(string(data1))   data2, _ := f.ReadFile("hello2.txt")  fmt.Println(string(data2)) }

在指定 go:embed 注解时可以一次性多个文件来读取,并且也可以一个变量多行注解:

//go:embed hello1.txt  //go:embed hello2.txt var f embed.FS

也可以通过在注解中指定目录 helloworld,再对应读取文件:

//go:embed helloworld var f embed.FS  func main() {  data1, _ := f.ReadFile("helloworld/hello1.txt")  fmt.Println(string(data1))   data2, _ := f.ReadFile("helloworld/hello2.txt")  fmt.Println(string(data2)) }

同时既然能够支持目录读取,也能支持贪婪模式的匹配:

//go:embed helloworld/* var f embed.FS

可能会有小伙伴注意到,embed.FS 也能调各类文件系统的接口,其实本质是 embed.FS 实现了 io/fs 接口。

只读属性

在 embed 所提供的 FS 中,我们可以发现其都是打开和只读方法:

type FS     func (f FS) Open(name string) (fs.File, error)     func (f FS) ReadDir(name string) ([]fs.DirEntry, error)     func (f FS) ReadFile(name string) ([]byte, error)

根据此也可以确定 embed 所打包进二进制文件的内容只允许读取,不允许变更。

更抽象来讲就是在编译期就确定了 embed 的内容,在运行时不允许修改,保证了一致性。

“如何使用Go1.16的新特性”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

--结束END--

本文标题: 如何使用Go1.16的新特性

本文链接: https://lsjlt.com/news/281189.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 如何使用Go1.16的新特性
    本篇内容介绍了“如何使用Go1.16的新特性”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!无法将静态资源编译打包进二进制文件的话,通常会有两...
    99+
    2023-06-15
  • Go1.16的新特性有哪些
    本篇内容介绍了“Go1.16的新特性有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!前几天 Go 官方正式发布了 1.16 版本。从这个...
    99+
    2023-06-15
  • Go1.16新特性embed打包静态资源文件实现
    目录背景embed 嵌入字符串、字节切片、文件嵌入嵌入文件嵌入文件夹嵌入匹配FS 文件系统总结:背景 相信有一部分人喜爱 GO 的初衷大概是:跨平台静态编译,如果在没用通过 CGO ...
    99+
    2024-04-02
  • 如何在html5中使用新特性
    今天就跟大家聊聊有关如何在html5中使用新特性,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。1)新的语义标签 footer header 等等 2)增强型表单 表单2.0 3)音频...
    99+
    2023-06-09
  • Vue3 style中新增的特性如何使用
    本文小编为大家详细介绍“Vue3 style中新增的特性如何使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“Vue3 style中新增的特性如何使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。style新特...
    99+
    2023-07-06
  • CSS新特性有哪些及如何使用
    这篇文章主要介绍“CSS新特性有哪些及如何使用”,在日常操作中,相信很多人在CSS新特性有哪些及如何使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”CSS新特性有哪些及如何...
    99+
    2024-04-02
  • C++11中新特性“=default”,“=delete”如何使用
    小编给大家分享一下C++11中新特性“=default”,“=delete”如何使用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1、 =default 和=de...
    99+
    2023-06-15
  • HTML5的新特性怎么使用
    这篇“HTML5的新特性怎么使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“HTML5的...
    99+
    2024-04-02
  • React18新增特性released的使用
    目录新功能:Automatic Batching新功能:Transitions新的Suspense功能新的客户端和服务器Rendering APIsReact DOM ClientR...
    99+
    2024-04-02
  • 怎么使用的新Java特性
    这篇文章主要讲解了“怎么使用的新Java特性”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么使用的新Java特性”吧!1 Try-with-resource 语句使用 try-catch ...
    99+
    2023-06-15
  • 如何使用泛型为golang添加新特性
    go 中泛型允许创建适用于多种数据类型的代码。语法为 type name[t any] struct { ... },其中 t 为泛型参数。使用 func copyslice[t any...
    99+
    2024-05-02
    golang 泛型
  • Vue3.0新特性怎么使用
    本篇内容主要讲解“Vue3.0新特性怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Vue3.0新特性怎么使用”吧!1、Vue3带来的新变化性能提升(零成本:从vue2切到vue3就享受到...
    99+
    2023-06-29
  • es6新特性怎么使用
    这篇“es6新特性怎么使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“es6新特性怎么使用”文章吧。es6新特性有:1、l...
    99+
    2023-07-04
  • Java8新特性怎么使用
    本篇内容介绍了“Java8新特性怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Java语言新特性Lambda表达式Lambda表达式...
    99+
    2023-06-02
  • 如何使用Oracle的OMF 特性
    小编给大家分享一下如何使用Oracle的OMF 特性,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!1.确认系统是否启用OMF特性Oracle数据库是否启用OMF特性可以通过查看DB_CRE...
    99+
    2024-04-02
  • PHP7中的特性如何使用
    这篇“PHP7中的特性如何使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“PHP7中的特性如何使用”文章吧。PHP7的一些...
    99+
    2023-06-26
  • C++11新特性“=default”,“=delete”的使用
    1、 =default 和=delete 概述 任何事物的出现都必然有着其出现的理由,伴随着每一个新的概念产生都会带来一系列的便利和价值。C++在不断的演变与发展,与此同时,伴随着...
    99+
    2024-04-02
  • 如何使用更新的特性进行响应式设计
    这篇文章主要介绍“如何使用更新的特性进行响应式设计”,在日常操作中,相信很多人在如何使用更新的特性进行响应式设计问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何使用更新的特...
    99+
    2024-04-02
  • PHP 函数新特性的兼容性如何?
    PHP 函数新特性的兼容性 随着 PHP 版本的不断更新,新的函数特性也在不断增加,但在实际项目中使用这些特性时,需要注意其兼容性问题。本篇文章将探讨 PHP 函数新特性的兼容性,并提...
    99+
    2024-05-01
    php 函数兼容性
  • PHP 函数新特性如何促进 web 应用的性能?
    通过利用 php 函数新特性,如 filter_var()、array_chunk() 和 in_array(),可以显著提升 web 应用程序性能:filter_var() 过滤输入,...
    99+
    2024-05-01
    性能 php
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作