返回顶部
首页 > 资讯 > 精选 >在 .go 文件中运行函数和在 Go 模板中调用它有什么区别?
  • 155
分享到

在 .go 文件中运行函数和在 Go 模板中调用它有什么区别?

go语言 2024-02-09 13:02:08 155人浏览 安东尼
摘要

在Go语言中,我们可以在.go文件中定义函数并直接调用它们,也可以在Go模板中调用函数。然而,在两种情况下,函数的运行方式和调用方式存在一些区别。在.go文件中运行函数时,我们可以直接

Go语言中,我们可以在.go文件中定义函数并直接调用它们,也可以在Go模板中调用函数。然而,在两种情况下,函数的运行方式和调用方式存在一些区别。在.go文件中运行函数时,我们可以直接通过函数名和参数列表来调用函数,而在模板中调用函数时,我们需要使用{{}}语法来包裹函数调用,并将函数名作为模板指令的一部分。此外,模板中的函数调用可以在模板渲染过程中动态执行,而在.go文件中运行函数时,函数的执行是静态的,不会受到模板渲染的影响。因此,根据具体的使用场景和需求,我们可以选择适合的方式来运行函数和调用它们。

问题内容

使用 text/template 包中的 template.funcmap,您可以直接从 go 模板文件中访问函数。

假设以下场景:在用户概述页面的处理程序中,调用函数 getallusers 并使用 executetemplate 将用户对象传递给模板:

func index(w Http.responsewriter, r *http.request) {
  users, err := model.getallusers()
  if err != nil {
    render50x()
    return
  }

  data := make(map[string]interface{})
  data["userlist"] = users

  render(w, r, data, "layout", "index")
}

这与将函数传递给模板并在那里执行它相同吗?

var funcs = template.funcmap{
  "getallusers": model.getallusers,
}

// func render
t := template.new("render").funcs(funcs)
if err := template.must(t.parsefs(viewsfs, files...)).executetemplate(w, layout, data); err != nil {
  log.println("error executing template:", err.error())
}

{{ range getAllUsers }}
  {{ .DisplayName }}
{{ end }}

这两种方法有区别吗?

解决方法

如果可以从模板中调用该函数,那就是一样的。一些差异:

如果你在Go中调用它,则不需要注册该函数。有时您无法访问模板解析来注册函数,因此这是唯一的方法(不要忘记:您必须在解析模板之前注册函数)。

此外,如果你在 Go 中调用它,你对它有更多的“控制”:你可以从恐慌中恢复,你可以预处理结果,并且你可以在其他 Go 代码中重用它。您还可以根据结果选择不执行模板,或者执行模板中可能无法(轻松)表达的其他操作。

函数的结果也可能不容易渲染。例如。它可能不是 string,或者可能没有 String() string 方法。因此,可能需要一些额外的 (Go) 逻辑将结果转换为人类可读的格式,这在模板中可能不可用,或者可能需要注册更多函数。

另请注意,并非所有函数都可以从模板注册和调用。可调用函数最多可以有 2 个返回类型,秒数只能是 error。从 Go 中,您可以调用“任何”函数并仅传递您需要的结果。如果函数有参数,您还必须将它们作为数据传递给模板执行(这样您就可以在调用函数时将它们传递到模板中)。

以上就是在 .go 文件中运行函数和在 Go 模板中调用它有什么区别?的详细内容,更多请关注编程网其它相关文章!

--结束END--

本文标题: 在 .go 文件中运行函数和在 Go 模板中调用它有什么区别?

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

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

猜你喜欢
  • 在 .go 文件中运行函数和在 Go 模板中调用它有什么区别?
    在Go语言中,我们可以在.go文件中定义函数并直接调用它们,也可以在Go模板中调用函数。然而,在两种情况下,函数的运行方式和调用方式存在一些区别。在.go文件中运行函数时,我们可以直接...
    99+
    2024-02-09
    go语言
  • cin.getline()和getline()函数在C++中有什么区别
    本篇文章为大家展示了cin.getline()和getline()函数在C++中有什么区别,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。cin.getline():用法:接收一个字符串,可以接收空格...
    99+
    2023-06-14
  • 在 go 模块文件 (go.mod) 中使用“go”版本指令有什么含义
    在 go 模块文件 (go.mod) 中使用"go"版本指令是Go语言中的一种特殊指令,它的作用是指定项目所使用的Go语言版本。在 go.mod 文件中,通过编写类似于"go 1.15...
    99+
    2024-02-10
    go语言
  • php中cli和cgi运行模式有什么区别
    区别:CLI指的是命令行的运行模式,即在控制台或者是shell中键入命令执行PHP脚本代码;而CGI是公共网关接口的运行模式,就是Apache在遇到PHP脚本的时候会将PHP程序提交给CGI应用程序(php-cgi.exe)解释,解释之后的...
    99+
    2023-05-14
    php
  • Go 函数中获取调用者的函数名和文件名及行号
    目录背景runtime.Caller获取调用者的函数名使用示例总结前言: 今天介绍了通过 runtime.Caller 回溯调用栈获取调用者的信息的方法,虽然强大,不过频繁获取...
    99+
    2022-06-07
    GO 调用 函数
  • 如何在Go语言中定义和调用函数
    在Go语言中定义和调用函数 Go语言是一种快速、简洁且安全的编程语言,它的函数是一等公民,因此在Go语言中定义和调用函数非常简单和灵活。本文将介绍如何在Go语言中定义和调用函数,并提供...
    99+
    2024-03-10
    go语言 调用函数 定义函数
  • linux运行级别定义在什么文件中
    这篇“linux运行级别定义在什么文件中”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“linux运行级别定义在什么文件中”文...
    99+
    2023-06-30
  • c++中的函数调用有哪几种方式?它们有什么区别
    c++ 中的函数调用方式有 4 种:值传递(复制实参值,不影响实参)、引用传递(传递实参地址,修改形参值会修改实参)、指针传递(传递实参指向的内存地址,修改指向的值会影响实参)、rval...
    99+
    2024-05-14
    c++
  • go语言中方法和函数的区别是什么
    区别:1、函数function是一段具有独立功能的代码,可以被反复多次调用,从而实现代码复用;而方法method是一个类的行为功能,只有该类的对象才能调用。2、方法有接受者,而函数无接受者。3、函数不可以重名,而方法可以重名。4、调用方式不...
    99+
    2023-05-14
    go语言 Golang
  • php中是否存在方法?和函数有什么区别?
    PHP 是一种流行的编程语言,被广泛用于 Web 开发。在 PHP 中,方法(method)是一种抽象的概念,可以用来执行一组代码,以达到特定的目的。但是,许多 PHP 开发者常常困惑于是否存在方法(method)这个概念。在本文中,我们将...
    99+
    2023-05-14
    方法 php 函数
  • Go 语言中的数组和切片有什么区别?
    在 Go 语言中,数组和切片都是常见的数据结构。尽管它们都可以用于存储相同类型的数据,但它们在语义上具有不同的行为,这使得它们在实际使用中有着不同的用途。 数组 数组是一种固定长度、存储相同类型元素的集合。在 Go 语言中,数组的长度...
    99+
    2023-10-07
    数组 git 日志
  • MATLAB中脚本文件和函数文件的区别是什么
    在MATLAB中,脚本文件和函数文件都是用来存储一系列MATLAB命令的文件,但它们有一些区别: 脚本文件是一系列按顺序执行的M...
    99+
    2024-04-03
    MATLAB
  • TensorFlow中的LSTM和GRU在序列建模中有什么区别
    LSTM(Long Short-Term Memory)和GRU(Gated Recurrent Unit)都是常用于序列建模的循环...
    99+
    2024-03-01
    TensorFlow
  • 为什么要在 Spring 中使用 Go 索引函数?
    Spring 是一个流行的 Java 开发框架,它提供了丰富的功能和组件,可以帮助开发人员快速开发高质量的应用程序。在 Spring 中,有一个非常实用的功能是 Go 索引函数,本文将深入探讨为什么要在 Spring 中使用 Go 索引函数...
    99+
    2023-10-11
    索引 spring 函数
  • 如何在Go语言中使用NumPy函数处理文件数据?
    Go语言是一门高效、简洁、强大的编程语言,而NumPy则是Python中广受欢迎的数学计算库。在Go语言中,我们可以使用NumPy函数处理文件数据,并且通过一些简单的代码示例来演示这个过程。 一、NumPy简介 NumPy是Python中用...
    99+
    2023-06-05
    numy 函数 文件
  • Go 函数 API 在 Bash 中的使用方法是什么?
    在 Bash 脚本中使用 Go 函数 API 可以让你的脚本更加高效和灵活。Go 函数 API 是 Go 语言中提供的一组函数库,可以帮助你在 Bash 脚本中实现更加复杂的功能。本文将介绍如何在 Bash 中使用 Go 函数 API,并...
    99+
    2023-08-07
    函数 api bash
  • 响应函数和其他函数在 PHP Laravel 中的区别是什么?
    在 PHP Laravel 中,响应函数和其他函数的区别是什么?这是一个常见的问题,尤其是对于那些正在学习 Laravel 框架的开发者来说。在本文中,我们将讨论这个问题,并演示一些代码来说明它们之间的不同之处。 首先,让我们了解一下响应函...
    99+
    2023-08-24
    laravel 响应 函数
  • php中存在方法吗和函数的区别是什么
    这篇文章主要讲解了“php中存在方法吗和函数的区别是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“php中存在方法吗和函数的区别是什么”吧!一、PHP 方法的定义在 PHP 中,方法(m...
    99+
    2023-07-05
  • Python跨文件调用函数以及在一个文件中执行另一个文件
    目录一、项目简介二、调用类型1、调用同文件中的函数2、调用同目录下不同文件中的函数3、调用同级文件夹文件中的函数4、调用上一级文件夹文件中的函数5、调用上一级文件夹子文件夹下文件中的...
    99+
    2022-12-09
    python跨文件调用函数 python函数之间的调用 python一个文件中执行另一个文件代码
  • UNIX存储函数在GO语言中的应用是什么?
    UNIX是一种操作系统,它具有许多独特的特性,其中之一是UNIX存储函数。这些函数是UNIX操作系统中的一组工具,用于操作文件和文件系统。这些函数可以在许多编程语言中使用,包括GO语言。在本文中,我们将探讨UNIX存储函数在GO语言中的应...
    99+
    2023-07-23
    unix 存储 函数
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作