首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在Go的函数中得到调用者函数名?

原文作者:smallnest 有时候在Go的函数调用的过程中,我们需要知道函数被谁调用,比如打印日志信息等。例如下面的函数,我们希望在日志中打印出调用者的名字。...2我是 main.Bar, 谁又在调用我可以看到函数在被调用的时候,printMyName把函数本身的名字打印出来了,注意这里Caller的参数是1, 因为我们将业务代码封装成了一个函数。...首先打印函数调用者的名称 将上面的代码修改一下,增加一个新的printCallerName的函数,可以打印调用者的名称。...你可以通过runtime.Caller、runtime.Callers、runtime.FuncForPC等函数更详细的跟踪函数的调用堆栈。...0 代表当前函数,也是调用runtime.Caller的函数。1 代表上一层调用者,以此类推。

5.3K30

如何在 Go 函数中获取调用者的函数名、文件名、行号...

对于在记录日志时记录调用 Logger 方法的调用者的函数名、行号这些信息。...) Caller 函数会报告当前 Go 程序调用栈所执行的函数的文件和行号信息。...//获取的是 CallerA函数的调用者的调用栈 pc1, file1, lineNo1, ok1 := runtime.Caller(1) } 函数的返回值为调用栈标识符、带路径的完整文件名...获取调用者的函数名 runtime.Caller 返回值中第一个返回值是一个调用栈标识,通过它我们能拿到调用栈的函数信息 *runtime.Func,再进一步获取到调用者的函数名字,这里面会用到的函数和方法如下...func FuncForPC(pc uintptr) *Func func (*Func) Name runtime.FuncForPC 函数返回一个表示调用栈标识符pc对应的调用栈的*Func;如果该调用栈标识符没有对应的调用栈

6.7K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    『Flutter』手势交互

    1.前言经过上篇文章的介绍,已经将跨页面之间跳转的时候传参的方式介绍给大家了,本篇文章将给大家介绍如何在 Flutter 中使用手势交互。...onPanEnd: 当滑动结束时触发。Scale(缩放):onScaleStart: 当缩放开始时触发。onScaleUpdate: 在缩放过程中连续触发。onScaleEnd: 缩放结束时触发。...main函数调用runApp,将MyApp作为根widget。...GestureDetector还包含多个事件处理函数,如onTap、onDoubleTap、onLongPress等。这些函数分别在用户点击、双击或长按容器时触发,并在控制台中打印相应的消息。...最后,GestureDetector还包含一些处理垂直拖动事件的函数,如onVerticalDragDown、onVerticalDragStart、onVerticalDragUpdate这些函数在用户在容器上执行垂直拖动操作时触发

    53852

    Dart-类(上)

    age years old."); }}void main() { var person = Person("Alice", 30); person.introduce();}运行结果:在上面简单的介绍了下如何在...Dart 使用类名作为构造函数(如 Person(this.name, this.age)),允许有多个命名构造函数JavaScript 使用 constructor 关键字定义构造函数属性访问Dart...中,你可以直接定义属性和它们的类型(如 String name;)JavaScript 中,属性通常在构造函数内通过 this 关键字定义字符串插值Dart 使用 $ 符号进行字符串插值(如 "$name...:在 Dart 和 JavaScript (ES6 及以后) 中,静态方法的定义方式相同,都是在方法名前加上 static 关键字静态属性在 Dart 中也是使用 static 关键字,而在 JavaScript...JavaScript 中类型是动态的,不需要显式声明访问方式:在 Dart 和 JavaScript 中,静态方法和属性都通过类名直接访问,而不是通过类的实例构造函数在上方的类定义中已经带着大家过了一遍类的定义了我这里就是想给大家单独说一下这个语法糖的构造函数

    18410

    APUE学习手札 编写一个与3.12节中dup2功能相同的函数,要求不调用fcntl函数,并且要有正确的出错处理

    3.2 编写一个与3.12节中dup2功能相同的函数,要求不调用fcntl函数,并且要有正确的出错处理。...思路,不断执行dup函数,直到返回与newfd相同的文件描述符,所有都执行结束之后关闭之前dup返回的文件描述符 不要忘记特判newfd和fd相同的情况,直接返回。...记住dup2还多了一歩先关闭newfd的步骤 #include "apue.h" #define BUFFSIZE 16 int main() { char buffer[BUFFSIZE]; int...编译生成了一个3.2的执行文件,上述代码的功能是复制了STDIN_FILENO和STDOUT_FILENO这两个文件描述符,分别返回4和5 编译生成了一个3.2的执行文件,上述代码的功能是复制了STDIN_FILENO...和STDOUT_FILENO这两个文件描述符,分别返回4和5 再通过读写验证my_dup是否调用成功,出错处理也在程序中有体现。

    88110

    【译】Flutter架构综述

    这就解释了为什么当你通过调试工具(如Dart DevTools的一部分Flutter检查器)检查这个树时,你可能会看到一个比你的原始代码更深的结构。...这是一个函数调用中的上下文,比如Theme.of(context),并作为参数提供给build()方法。...在这一单次走过树的结束时,每个对象都在其父约束内有一个定义的大小,并准备好通过调用paint()方法来绘制。 箱子约束模型作为一种在O(n)时间内布局对象的方法是非常强大的。...数据从像Map这样的Dart类型序列化为标准格式,然后反序列化为Kotlin(如HashMap)或Swift(如Dictionary)中的等价表示。 ?...外来函数接口(FFI)模型可以比平台通道快很多,因为不需要序列化来传递数据。相反,Dart运行时提供了在由Dart对象支持的堆上分配内存的能力,并对静态或动态链接的库进行调用。

    5.6K10

    Dart In Action -Dar的基本数据类型(一)

    (按位运算符,如>>,在int类中有定义。)如果num及其子类没有您要想要内容,那dart:math库可能有您想要的。 整数是没有小数点的数字。..."; 您可以使用${expression}将表达式的值放在字符串中。 如果表达式是标识符,则可以跳过{}。 要获取对应于对象的字符串,Dart调用对象的toString()方法。...; 注意:==运算符测试两个对象是否相同。 如果两个字符串包含相同的代码单元序列,则它们是等效的。...您可以使用Map构造函数创建相同的对象: var gifts = Map(); gifts['first'] = 'partridge'; gifts['second'] = 'turtledoves'...从Dart 2开始,new关键字是可选的。 有关详细信息,请参阅使用构造函数。

    2.5K20

    Flutter必备语言Dart教程04 - 异步,库

    现在我们来看看如何在Dart中处理异步代码。使用Flutter时,会执行各种操作,例如网络调用和数据库访问,这些操作都应该异步执行。 在Dart中导入库 在Dart中使用异步,需要先导入异步库。...无论您在匿名函数中返回什么,都会被转化为Future。 在main中,我们调用getAJoke函数,该函数返回 Future。...我们通过调用then函数来订阅Future,这些函数注册了一个回调,当Future发出值时调用它。我们还注册了一个catchError来处理在执行Future期间发生的任何异常。...如您所见,我在调用函数后添加了一个print语句。在这种情况下,首先执行print语句,然后打印从Future返回的值。 但是,如果我们有一个Future,我们想先执行它,然后再执行print语句。...Async/Await 首先在第3行的main函数的大括号之前添加async关键字。 然后我们在调用getAJoke函数之前添加await关键字,它的作用是等待从Future返回结果。

    1.7K20

    Flutter--Dart学习

    / x,y在函数调用时必须传入,否则编译错误 - 调用方式 add(1,2); // 可选命名参数 - 函数定义 int add(int x,int y,{int z:10,int m});//...x,y在函数调用时必须传入,而z,m可不传,10为z的默认值 - 调用方式 add(1,2,z:3,m:4);//传入z,m时候需要指定传入参数名,参数才会匹配 // 可选位置参数(与可选命名参数不能同时存在...) - 函数定义 int add(int x,int y,[int z=10,int m]);// x,y在函数调用时必须传入,z,m按参数传入顺序赋值,10为z的默认值 - 调用方式 add(1,2...如x++,x--,x>>2等一元/二元操作符都与Java相同,而新增了以下操作符: 级联操作符:.....如lib1.dart与lib2.dart都有同名叫Element的类,则可以使用as的方式设置库前缀,通过前缀.类名来引用 import 'package:lib1/lib1.dart'; import

    98420

    非常优雅简单的isolate,一行代码轻松实现Isolate复用与异步任务执行

    主要功能支持isolate数量自定义,支持isolate复用支持isolate任务执行完成后主动切回调用者isolate(如在dart主线程调用任务执行完后会主动切回主线程)当前isolate池无可用isolate...}"); }4.isolate池销毁,当确定不再使用isolate池时,可以调用dispose函数进行销毁,销毁后不能再次使用,建议在应用程序结束时调用IsolatePool.getInstance(...init参数coreThreadSum代表的是线程池线程数,建议根据实际情况选择合适的Isolate数量(如CPU核心数,异步类型(CPU密集型、IO))等,默认4个Isolate。...IsolatePoll中的runTask函数,该函数参数是一个函数类型,并且返回值是Future,该返回值会直接返回给调用者Isolate,runTask函数主要功能是判断Isolate池是否有空闲..._runTask函数,该函数通过调用sendTask函数将任务发送给子isolate,刚刚在init函数内已经将子isolate中的sendPort拿到了,所以sendTask函数的功能是通过拿到的

    16810

    在 Flutter 移动应用程序中创建一个列表

    Flutter 是一个流行的开源工具包,它可用于构建跨平台的应用。在文章《用 Flutter 创建移动应用》中,我已经向大家展示了如何在 Linux 中安装 Flutter 并创建你的第一个应用。...而这篇文章,我将向你展示如何在你的应用中添加一个列表,点击每一个列表项可以打开一个新的界面。...查看Flutter应用的主要部分 Flutter 应用的典型入口点是 main() 函数,我们通常可以在文件 lib/main.dart 中找到它: void main() { runApp(MyApp...MyHomePage() 是应用的初始页面,是一个有状态的微件,它包含包含可以传递给微件构造函数参数的变量(从上面的代码看,我们传了一个 title 变量给初始页面的构造函数): class MyHomePage...item_details_page.dart 文件中做相同的修改: 前面的步骤,其实我们是用 Hero() 微件对 Icon() 微件进行了封装。

    3.1K10

    Dart 代码的组件集合Dart VM

    请注意,该名称 Thread可能会让人有些困惑,因为所有 OS 线程都附加到与 Mutator 相同的 isolate,将重用相同的 Thread 实例。...优化编译的启动方式与非优化编译的启动方式相同:「通过遍历序列化内核 AST ,为正在优化的函数构建未优化的 IL」。...❞ 下次调用此函数时, 它将使用优化的代码。某些函数包含非常长的运行循环,对于那些函数,在函数仍在运行时,将执行从未优化代码切换到优化代码是有意义的。...(类型流分析或TFA),以确定应用程序的哪些部分可以从已知的入口点集合、分配哪些类的实例,以及类型如何在程序运转。...下次我们执行相同的调用点时,它将 C.method 直接调用,绕过任何类型的方法查找过程。

    1.6K30

    老司机用一篇博客带你快速熟悉Dart语法

    为了获得对应于object的字符串,Dart调用object的toString()方法。...如果两个字符串包含相同的代码单元序列,那么它们是等效的。 有关如何在字符串中表示Unicode字符的详细信息,请参见下文“字符”)。 关于String的更多详细的api用法,后文会专门讲解。...每个键只出现一次,但您可以多次使用相同的值。Dart支持map由map文字和map类型提供。...这意味着函数可以分配给变量或作为参数传递给其他函数。你也可以调用一个Dart类的实例,就像它是一个函数一样。有关详细信息,请参阅Callable类。...; 上面例2使用了一个匿名函数。更多关于下一节中的内容: (四)匿名函数 大多数函数都能被命名为匿名函数,如main()或printElement()。

    3.3K20

    【Dart语言解密】想要深入了解Dart语法和类型变量吗?

    1 Dart hello world示例 新建main.dart,声明一个带int参数的函数,并通过字符串内嵌表达式的方式把这个参数打印: printInteger(int a) { print('...打开官方文档或查看源码,这些常见运算符也继承自num: 有其他高级运算方法的需求num无法满足,可试用dart:math库,提供如三角函数、指数、对数、平方根等高级函数。...,Dart会调用对象的 toString() 方法。...又如何在遍历集合时,判断究竟是何种类型呢? 在Dart语言中,List和Map支持存储多种类型的元素。可通过泛型指定集合内部元素的类型。...如要在遍历集合时判断元素类型,使用Dart中的类型检查运算符is。如: // 使用is运算符判断了每个元素的类型,并打印了相应信息。

    25920

    为什么说Flutter让移动开发变得更好?

    下面看看如何在Flutter中实现上面的例子: 为电影项目创建一个无状态的Widget(无状态,因为包含静态属性),接收一个movie(例如Dart类)作为构造函数参数,并以声明方式描述布局,同时绑定电影的值...构建器函数为我们提供了一个BuildContext和要返回的项目的索引。...然后,当第一次调用构建方法时,开始等待Future回调的返回结果。 一旦得到返回结果,构建器会再次被调用,我们可以用返回结果来构建我们的UI。...我通过构建用于加载和显示数据的泛型类来实现,这使得我可以重复使用电影和演出的每个布局。如果用Android实现相同的事情,我必须为电影和演出分别使用不同的Activity。...可以想象这让维护工作瞬间变得复杂,并且Android对于布局的共享处理方式不太灵活。 在Flutter体验结束时,我得出了一个非常直接和令人信服的结论: 我编写了更易维护的跨平台代码。

    2K10

    Dart的语法详解系列篇(四)-- 泛型、异步、库等有关详解九、泛型(Generics)十、库和可见性十一、异步支持十二、Isolates十三、生成器(Generators)十四、类型定义十五、元数据

    在函数的返回类型(T)中 2). 在参数类型(List)中 3). 在局部变量的类型(T tmp) 泛型方法可以声明类方法(实例和静态)以相同的方式获取泛型参数。...(一)使用库 使用import指定一个库中的命名空间如何在另一个库汇总使用。...// 正确写法: import 'test2.dart'; // 给导入的库指定一个前缀 方便识别 import 'test3.dart' as test3; 调用方式: void main...库的pubspec.yaml文件与普通应用程序包的文件格式相同。 lib目录:库代码位于lib 目录下,并且对其他包是公共的。您可以根据需要在lib下创建任何层次结构。...元数据注解以字符开头@,后跟对编译时常量(如deprecated)的引用或对常量构造函数的调用。

    3.9K40

    带你快速掌握Flutter的视图(Widgets)

    正如你所看到的,Text 没有与之关联的状态信息,它呈现了构造函数中传递的内容,仅此而已。...可以通过将Text包装在StatefulWidget中并在点击按钮时更新它来实现,如: import 'package:flutter/material.dart'; void main() {...另外推荐大家在widget catalog中查看 Flutter提供的布局。 如何在布局中添加或删除组件?...在Flutter中,因为Widget是不可变的,所以没有类似的方法。相反,我们可以传入一个函数或表达式,该函数或表达式返回一个Widget给父项,并通过布尔值控制该Widget的创建。...例如,当点击一个FloatingActionButton时,如何在两个Widget之间切换: import 'package:flutter/material.dart'; void main() {

    11K10
    领券