2017-03-17 3 views
0

を満たしていない場合、私はこのようなログを持って実行されたコンテンツをglogます:は、質問は簡単です必要なレベル

glog.v(5).Infof("xxx %v", getLogContent()) 

しかし、私のgetLogContent()は方法を時間のかかるあるので、私はお願いしたいと思います:私のプログラムがv(5)レベルに達していないときにgetLogContent()が実行されたかどうか

答えて

2

はい。

文の場合はgetLogContent()

if glog.V(5) { 
    glog.V(5).Infof("xxx %v", getLogContent()) 
} 

Goは、すべての引数を評価し、そのgetLogContentが呼び出されますが、冗長レベルがされていない場合、出力は記録されませんを実行したくない場合は、追加する必要があります会った

+1

ええ、ここにあります:https://github.com/golang/glog/blob/master/glog.go#L992 –

0

私は不思議で、これで遊んでいました。これはあなたのために働くかどうかわかりませんが、それは面白いです。

ラムダ関数を使用し、Stringerインターフェイスを実装する関数型を作成することにより、Go形式ライブラリは、印刷する必要があるときに呼び出すことができます。

私は本当に機能の種類を作成したいと思った方法を見つけることができませんでした。おそらく、他の誰かがより良いトリックを知っているかもしれません。

package main 

import (
    "fmt" 
    "os" 
    "time" 
) 

type thing func() string 

func (t thing) String() string { 
    return t() 
} 

func toThing(f func() string) thing { 
    return f 
} 

func maybePrint(p bool, args ...interface{}) { 
    if p { 
     fmt.Println(args...) 
    } 
} 

func main() { 
    maybePrint(len(os.Args) > 2, "testing", toThing(func() string { 
     fmt.Println("Calculating big thing") 
     time.Sleep(time.Second) 
     return "test" 
    })) 
}