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

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

原文作者:smallnest 有时候在Go的函数调用的过程中,我们需要知道函数被谁调用,比如打印日志信息等。例如下面的函数,我们希望在日志中打印出调用者的名字。...2我是 main.Bar, 谁又在调用我可以看到函数在被调用的时候,printMyName把函数本身的名字打印出来了,注意这里Caller的参数是1, 因为我们将业务代码封装成了一个函数。...首先打印函数调用者的名称 将上面的代码修改一下,增加一个新的printCallerName的函数,可以打印调用者的名称。...0 代表当前函数,也是调用runtime.Caller的函数。1 代表上一层调用者,以此类推。...比如在上面的例子中增加一个trace函数,被函数Bar调用。 1…… 2func Bar() { 3 fmt.Printf("我是 %s, %s 又在调用我!

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
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    数据库sql常见优化方法

    一语惊醒梦中人,赶紧检查..果然如此! 有时我们写sql语句时,没有考虑它的性能或者完全没有优化意识,虽然能暂时满足基本功能,等到数据量大时,后果可想而知。...索引并不是越多越好,索引固然可以提高相应的select的效率,但同时也降低了insert及update 的效率。 3) 尽量避免在 where 子句中使用 !...4)尽量避免在 where 子句中使用 or 来连接条件,如果一个字段有索引,一个字段没有索引,引擎将放弃使用索引而进行全表扫描,如: select id from person_info where...age/2 = 10 应改为: select id from person_info where age= 10*2; 9)应尽量避免在where子句中对字段进行函数操作,这将导致引擎放弃使用索引而进行全表扫描...11)update 语句,如果只更改1、2个字段,不要update全部字段,否则频繁调用会引起明显的性能消耗,同时带来大量日志。

    2.4K30

    T-SQL进阶:超越基础 Level 2:编写子查询

    在函数调用中使用子查询的示例 要演示在函数调用中使用子查询,假设您需要显示OrderDate和每个Sales.SalesOrderHeader记录的最大OrderDate之间的天数。...[SalesOrderHeader]; 清单6:函数调用中的子查询 清单6中的代码有两个不同的子查询。 两个子查询返回Sales.SalesOrderHeader表中的最大OrderDate。...在修改数据的语句中使用子查询的示例 到目前为止,我的所有示例一直在演示如何在SELECT语句的不同部分中使用子查询。 也可以在INSERT,UPDATE或DELETE语句中使用子查询。...清单10中的代码显示了如何在INSERT语句中使用子查询。...这只是在INSERT语句中如何使用子查询的一个示例。 请记住,也可以在UPDATE和/或DELETE语句中使用子查询。

    6K10

    PLSQL --> 函数

    . update 命令的set 子句中 3.函数在SQL中调用的限制 a....SQL语句中只能调用存储在服务器端的函数,而不能调用存储于客户端的函数 b. SQL语句中调用的函数只能带有输入参数IN,而不能带有输出参数OUT 以及输入输出参数IN OUT c....SQL语句中调用的函数只能使用SQL支持的标准数据类型,不能使用PL/SQL特有的类型,如boolean,table,record等 d....SQL语句中调用的函数不能包含insert,update和delete 语句(注意理解,这里的DML指的是函数中使用DML,非外部调用SQL语句@20130905) 下面演示SQL调用时不能完整DML...SQL语句可以调用函数 多用于数据库中完成特定的操作,如删除,更新,插入等DML操作 多用于特定的数据如选择等 七、更多参考 有关SQL请参考 SQL 基础--> 子查询 SQL 基础-->多表查询

    90120

    java面试(3)SQL优化

    任何在Order by语句的非索引项或者有计算表达式都将降低查询速度 应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如select id...任何在where子句中使用is null或is not null的语句优化器是不允许使用索引的。...如:select id from t where num/2 = 100可以改为select id from t where num = 100*2 应尽量避免在where子句中对字段进行函数操作...如:select id from t where datediff(day,createdate,’2005-11-30′) = 0 不要在 where 子句中的“=”左边进行函数、算术运算或其他表达式运算...Update 语句,如果只更改1、2个字段,不要Update全部字段,否则频繁调用会引起明显的性能消耗,同时带来大量日志 对于多张大数据量(这里几百条就算大了)的表JOIN,要先分页再JOIN,否则逻辑读会很高

    3.2K20

    Python 小白的晋级之路 - 第十三部分:创建函数

    在以上示例中,我们定义了一个函数greet(),它不接收任何参数,函数体内输出一条简单的问候语。 3、使用参数 函数可以接收参数,以便传递数据给函数。在函数定义时,我们可以指定参数的名称和类型。...4、返回值 函数可以使用return语句返回一个值,这个返回值可以被调用函数的地方使用或存储起来。...我们可以将返回值赋给一个变量,如sum_result = add(3, 4),或者直接在输出语句中使用print(add(3, 4))来打印函数的返回值。...你可以尝试编写更多的函数来加深理解,并尝试处理其他类型的异常情况。 8、总结 我们了解到了函数的概念以及如何在 Python 中定义函数、使用参数和返回值、处理全局变量以及异常处理。...可以使用return语句在函数中返回一个值,该返回值可以被调用函数的地方使用或存储。 函数内部可以使用局部变量,局部变量只在函数内部可见。

    9010

    SqlAlchemy 2.0 中文文档(三十六)

    include_defaults – 如果为 True,则将在 INSERT 和 SELECT 语句中呈现在 Column 对象上指定的非服务器默认值和 SQL 表达式(如 Column INSERT...注意 使用 Python 可调用函数的 Python 端默认值仅在整个语句中被调用一次,而不是每行一次。 method inline() → Self 使此 Insert 构造“内联”。...attribute select: Select[Any] | None = None 用于 INSERT … FROM SELECT 的 SELECT 语��� class sqlalchemy.sql.expression.Update...注意 使用 Python 可调用函数的 Python 端默认值将仅在整个语句中被调用 一次,而不是每行一次。 method inline() → Self 将此 Insert 构造“内联”。...可能的用例包括上面给出的“materialized path”示例,以及利用特殊的 SQL 函数来创建连接条件,如几何函数。

    40410

    C语言:分支与循环

    要想得到n的最低位,可以使⽤n%10的运算,得到的余数就是最低位,如:1234%10得到4 2....九、随机数生成方法 9.1 rand C语⾔提供了⼀个函数叫 rand,这函数是可以⽣成随机数的 int rand (void); rand函数会返回⼀个伪随机数,这个随机数的范围是在0~...9.2 srand C语⾔中⼜提供了⼀个函数叫 srand,⽤来初始化随机数的⽣成器的 程序中在调⽤ rand 函数之前先调⽤ srand 函数,通过 srand 函数的参数seed来设置...在C语⾔中有⼀个函数叫 time ,就可以获得这个时间 time_t time (time_t* timer); time 函数会返回当前的⽇历时间,其实返回的是1970年1⽉1⽇0时...(所以我们一般把他放在main函数里面的靠前位置),如果每生成一次随机数之前就调用一次srand函数,那么得到随机数会非常地接近。

    17710

    MySQL复习资料(七)——MySQL-存储过程

    它与函数在数据库中的异同点如下: (1)存储过程与函数的相同点在于,它们的目的都是为了可重复地执行数据库SQL语 句的集合,并且都是经过一次编译后,后面再次需要时直接执行即可; (2)存储过程与函数的不相同点有...存储过程在创建时没有返回值,而函数在定义时必须设置返回值。 存储过程没有返回值类型,且不能将结果直接赋值给变量;而函数定义时需要设置返回值类型,且在调用时必须将返回值赋给变量。...存储过程须通过CALL进行调用,不能使用SELECT调用;而函数则可在SELECT语句中使用 存储过程的创建与执行 存储过程在创建时与创建函数相同,首先都需要临时修改语句结束符号。...IN、OUT、INOUT三者的区别如下所示: IN:表示输入参数,即参数是在调用存储过程时传入到存储过程里面使用,传入的数据可以是直接数据(如5),也可以是保存数据的变量。...法海你不懂爱,雷峰塔你掉下来'); delimiter $$ #开启边界 create procedure fahai(in new_id int,intro varchar(50)) BEGIN update

    60020

    SQL的基本使用和MySQL在项目中的操作

    SQL是一门数据库编程语言 使用SQL语言编写出来的代码,叫做SQL语句 SQL语句只能在关系型数据库中使用(例如Mysql、Oracle、SQL Server),非关系型数据库(如Mongodb)不支持...语句 语法格式 update语句用于修改表中的数据,语法格式如下: update 表名称 set 列名称 = 新值 where 列名称 = 某值 用 update指定要更新那个表中的数据 用 set指定列对应的新值...,delete语句中,,皆可使用where子句来限定选择的标准。...-- 查询语句中的where条件 select 列名称 from 表名称 where 列 运算符 值 -- 更新语句中的where条件 update 表名称 set 列=新值 where 列 运算符...db.query()函数,指定要执行的SQL语句,通过回调函数拿到执行结果 //检测mysql模块能否正常工作 db.query('select 1',(err,results)=>{ if(err

    1.3K20

    解决SQL中的“Expression #1 of SELECT list is not in GROUP BY clause“错误

    默语博客:解决SQL中的"Expression #1 of SELECT list is not in GROUP BY clause"错误 ‍♂️ 大家好,默语:Java高级工程师、自媒体博主,北京城市开发者社区的主理人...而SELECT列表中的每一列都必须是一个聚合函数或出现在GROUP BY子句中,否则SQL引擎无法确定如何对这些列进行分组,从而导致错误。 2....复制并粘贴以下内容,如有[mysqld],则放到[mysqld]最后,如没有则放到配置文件最下方即可: [mysqld] sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE...ONLY_FULL_GROUP_BY:这是MySQL中的一个模式,它严格要求SELECT列表中的每一列都必须在GROUP BY子句中或是聚合函数的一部分。...A: ONLY_FULL_GROUP_BY模式严格要求SELECT列表中的每一列都必须在GROUP BY子句中或是聚合函数的一部分,否则会报错。

    14210

    带你认识 flask 国际化和本地化

    为每个请求调用装饰器函数以选择用于该请求的语言: app/__init__.py:选择最匹配的语言 from flask import request # ......为翻译而标记文本的方式是将它们封装在一个函数调用中,该函数调用为_(),仅仅是一个下划线。最简单的情况是源代码中出现的字符串。...= _l('Please log in to access this page.') 03 标记文本以在模板中翻译 在前面的章节中,你已经看到了如何在Python源代码中标记可翻译的文本,但这只是该过程的一部分...update调用采用新的messages.pot文件并将其合并到与项目相关的所有messages.po文件中。...update()函数在同一个命令中结合了extract和update步骤,如果一切都成功的话,它会在更新完成后删除messages.pot文件,因为当再次需要这个文件时,可以很容易地重新生成 init

    1.8K30

    数据库SQL优化总结

    如: select id from t where num/2 = 100 应改为: select id from t where num = 100*2 应尽量避免在where子句中对字段进行函数操作...,这将导致引擎放弃使用索引而进行全表扫描 不要在 where 子句中的“=”左边进行函数、算术运算或其他表达式运算,否则系统将可能无法正确使用索引....Update 语句,如果只更改1、2个字段,不要Update全部字段,否则频繁调用会引起明显的性能消耗,同时带来大量日志....的效率,因为 insert 或 update 时有可能会重建索引,所以怎样建索引需要慎重考虑,视具体情况而定。...索引的最左原则(左前缀原则),如(c1,c2,c3,c4....cN)的联合索引,where 条件按照索引建立的字段顺序来使用(不代表and条件必须按照顺序来写),如果中间某列没有条件,或使用like会导致后面的列不能使用索引

    95320

    Scala中的类和对象:定义、创建和使用

    最后,我们调用person对象的greet方法来打印问候语。 运行上述代码,将得到以下输出结果: Hello, my name is John and I am 25 years old....最后,我们调用了person对象的greet方法,打印出了问候语。 构造函数 除了属性和方法,类还可以有构造函数。构造函数是在创建对象时执行的代码块,用于初始化对象的属性。...在Scala中,主构造函数可以直接在类定义中声明。 让我们来看一个示例,演示如何在类中定义构造函数。...然后,我们创建了一个Person对象,并调用了greet方法来打印问候语。 运行上述代码,将得到以下输出结果: Creating a new person......然后,我们创建了一个Person对象,并调用了greet方法来打印问候语。

    5710

    在MySQL中建立自己的哈希索引(书摘备查)

    你所要做的事情就是在where子句中手动地定义哈希函数。 一个不错的例子就是URL查找。URL通常会导至B-Tree索引变大,因为它们非常长。...下面的例子显示了触发器如何在插入和更新值的时候维护url_crc列。...each row begin set new.url_crc=crc32(new.url); end; | create trigger pseudohash_crc_upd before update...它们是强加密函数,被设计为不产生任何冲突。这并不是我们的目标。简单的哈希函数能在有较好性能的同时保证可接受的冲突率。 如果表有很多行并且crc32()产生了很多冲突,就要实现自己的64位哈希函数。...为了避免碰撞问题,必须在where子句中定义两个条件。如果碰撞不是问题,不如进行统计并且不需要精确的结果,就可以通过在where子句中使用crc32()值简化查询,并得到效率提升。

    2.2K30
    领券