好湿?好紧?好多水好爽自慰,久久久噜久噜久久综合,成人做爰A片免费看黄冈,机机对机机30分钟无遮挡

主頁 > 知識(shí)庫 > Golang 實(shí)現(xiàn)獲取當(dāng)前函數(shù)名稱和文件行號(hào)等操作

Golang 實(shí)現(xiàn)獲取當(dāng)前函數(shù)名稱和文件行號(hào)等操作

熱門標(biāo)簽:壽光微信地圖標(biāo)注 阿克蘇地圖標(biāo)注 百度地圖標(biāo)注后傳給手機(jī) 外呼系統(tǒng)顯本地手機(jī)號(hào) excel地圖標(biāo)注分布數(shù)據(jù) 電話機(jī)器人軟件免費(fèi) 涿州代理外呼系統(tǒng) 評(píng)價(jià)高的400電話辦理 外呼系統(tǒng)用什么卡

大家還是直接看代碼吧~

// 獲取正在運(yùn)行的函數(shù)名
func runFuncName()string{
    pc := make([]uintptr,1)
    runtime.Callers(2,pc)
    f := runtime.FuncForPC(pc[0])
    return f.Name()
}
package main 
import(
    "fmt"
    "runtime"
)
 
// 獲取正在運(yùn)行的函數(shù)名
func runFuncName()string{
    pc := make([]uintptr,1)
    runtime.Callers(2,pc)
    f := runtime.FuncForPC(pc[0])
    return f.Name()
}
 
func test1(){
    i:=0
    fmt.Println("i =",i)
    fmt.Println("FuncName1 =",runFuncName())
}
 
func test2(){
    i:=1
    fmt.Println("i =",i)
    fmt.Println("FuncName2 =",runFuncName())
}
 
func main(){
    fmt.Println("打印運(yùn)行中的函數(shù)名")
    test1()
    test2()
}

golang 的runtime庫,提供Caller函數(shù),可以返回運(yùn)行時(shí)正在執(zhí)行的文件名和行號(hào):

func Caller(skip int) (pc uintptr, file string, line int, ok bool) {

Caller reports file and line number information about function invocations on the calling goroutine's stack. The argument skip is the number of stack frames to ascend, with 0 identifying the caller of Caller. (For historical reasons the meaning of skip differs between Caller and Callers.) The return values report the program counter, file name, and line number within the file of the corresponding call. The boolean ok is false if it was not possible to recover the information.

調(diào)用方法如下,返回的file為絕對路徑,line為行號(hào)。有了這個(gè)就可以在自己的日志等函數(shù)中添加這個(gè)記錄了。

_, file, line, ok := runtime.Caller(1)

補(bǔ)充:go 定位函數(shù)操作位置(文件名、函數(shù)名、所在行)

runtime.Caller()返回函數(shù)執(zhí)行程序計(jì)數(shù)pc、執(zhí)行的文件名和所在行數(shù)

runtime.FuncForPC()傳入pc,得到運(yùn)行的函數(shù)指針

文件結(jié)構(gòu)

- runtime
- -file1.go
- -file2.go
- -main.go

main.go文件

package main
import (
	"fmt"
	"path"
	"runtime"
)
func main(){
	name, funcName, line := f2(0)
	fmt.Printf("file:%v;function:%v;line:%d",name,funcName,line)
}
func getLocation(skip int)(fileName ,funcName string ,line int){
	pc, file, line, ok := runtime.Caller(skip)
	if !ok {
		fmt.Println("get info failed")
		return
	}
	fmt.Println(pc,file)
	fileName = path.Base(file)
	funcName = runtime.FuncForPC(pc).Name()
	return
}

file1.go文件

package main
func f1(skip int)(fileName ,funcName string ,line int){
 fileName, funcName, line = getLocation(skip)
 return
}

file2.go文件

package main
func f2(skip int)(fileName ,funcName string ,line int){
 return f1(skip)
}

當(dāng)在main.go文件中調(diào)用f2時(shí)

func main(){
 name, funcName, line := f2(3)
 fmt.Printf("file:%v;function:%v;line:%d",name,funcName,line)
 //output:file:main.go;function:main.main;line:10
}

f2調(diào)取f1,f1調(diào)取getLocation;f2->f1->getLocation經(jīng)歷了三層調(diào)用,所以在f2中傳入3時(shí),返回的當(dāng)前該函數(shù)的執(zhí)行位置及所在函數(shù)名、所在文件名

當(dāng)傳入2時(shí),返回的是(file:file2.go;function:main.f2;line:8)f2函數(shù)所在函數(shù)名、文件位置、文件名

當(dāng)傳入1時(shí),返回的是(file:file1.go;function:main.f1;line:4)f1函數(shù)所在函數(shù)名、文件位置、文件名

當(dāng)傳入0時(shí),返回的是(file:main.go;function:main.getLocation;line:16)getLocation函數(shù)所在函數(shù)名、文件位置、文件名

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。

您可能感興趣的文章:
  • Go語言的os包中常用函數(shù)初步歸納
  • Golang 獲取文件md5校驗(yàn)的方法以及效率對比
  • GoLang中生成UUID唯一標(biāo)識(shí)的實(shí)現(xiàn)
  • 聊聊golang中多個(gè)defer的執(zhí)行順序
  • Golang全局變量加鎖的問題解決
  • go語言基礎(chǔ) seek光標(biāo)位置os包的使用

標(biāo)簽:蘭州 重慶 欽州 雞西 銅川 梅河口 吐魯番 汕頭

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Golang 實(shí)現(xiàn)獲取當(dāng)前函數(shù)名稱和文件行號(hào)等操作》,本文關(guān)鍵詞  Golang,實(shí)現(xiàn),獲取,當(dāng)前,函數(shù),;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Golang 實(shí)現(xiàn)獲取當(dāng)前函數(shù)名稱和文件行號(hào)等操作》相關(guān)的同類信息!
  • 本頁收集關(guān)于Golang 實(shí)現(xiàn)獲取當(dāng)前函數(shù)名稱和文件行號(hào)等操作的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    主站蜘蛛池模板: 娇妻卧室借种的呻吟| 一级毛片金梅瓶**版| 亚洲国产一区二区精品专区发布 | 啊啊啊轻一点| 500篇艳妇短篇合换爱小说| 日本裸乳按摩奶头免费| a级毛片免费播放| 国产精品嫩草久久久久yw193| 日韩最新中文字幕| 林柔柔在厨房被C高潮| 中文字幕亚洲Av在线美利坚| 欧美精品videossex17| 冻千秋乳喷黄文| 顶级尤物极品女神福利视频| 国产高清精品自在线看| 强制play纯肉高H侵犯| 小sao货求辱骂| 国产又粗又猛又色又黃网站| 欧美黑人hd| 日韩黄色一级视频| 国产香蕉97碰碰久久人人剧情介绍| 成人无码区免费A片WWW| 伦伦理片伦理片| 黄色小视频免费看| writeas雷狮直播| 久久久精品一区二区三潘金莲| 国产综合成人久久大片91| 扒开老师双腿猛进入在线观看| 天全县| 偷拍图片/图片区综合 | 五月.com| 美女脱内衣露出奶| 日本亚洲欧美在线| 国精品无码一区二区三区在线秋菊| 日本**毛茸茸xxxxx| 秋霞无码免费AV鲁丝片秋霞| 日韩精品手机在线| 借种引狼入室娇妻被征服| 98色花堂永久地址入口| 欧美日韩在线精品成人综合网 | 九色在线看|