大概如下
type Correlaction struct {
Url string
Token string
Name string
TimeStamp string
SN string
}
func main()
correlaction := &Correlaction{
Url: url,
Token: token,
Name: name, // 視在哪跑,可能不會有 Name 值
}
寫了
func GetCorrelationID(test *Correlaction) (CorrelationID string)
要來組 CorrelactionID,每個 Struct Value 間加上 "-"
目前用
if Name != "" {
CorrelactionID := Url + "-" + Token + "-" + Name + "-" + TimeStamp + "-" + SN
// 結果 authenticate-fsdft4532123-JohnWick-1587896282-26
}else{
CorrelactionID := Url + "-" + Token + "-" + TimeStamp + "-" + SN
// 結果 authenticate-fsdft4532123-1587896282-26
}
return
覺得這樣寫很笨,有什麼好方法嗎?謝謝
不靠第三方或反射大概也只能這樣:
func (test *Correlaction)GetCorrelationID() (CorrelationID string){
if (test.Name == "" || test.Name == nil) {
CorrelationID = test.Url + "-" + test.Token + "-" + test.TimeStamp + "-" + test.SN
} else {
CorrelationID = test.Url + "-" + test.Token + "-" + test.Name + "-" + test.TimeStamp + "-" + test.SN
}
return
}
1.這個建議寫成struct的方法,畢竟感覺這個函式離開了這struct就沒用了。
2.golang其實鼓勵你往簡單的方向去思考,反而不鼓勵你寫出炫code,他的內建方法說真的也不夠多,我常常也覺得光是一個python的in,在golang你還得寫出一個方法來,蠻煩的。
靠第三方的寫法:
import (
"github.com/fatih/structs"
"strings"
)
type Correlaction struct {
Url string
Token string
Name string
TimeStamp string
SN string
}
func (test *Correlaction)GetCorrelationID() (CorrelationID string){
v := structs.Values(test)
tmp := []string
for _, value := range(v) {
if value != "" || value != nil {
tmp = append(tmp, value)
}
}
CorrelationID = strings.join(tmp, "-")
return
}
code沒比較短而且效率一定變差,優點是不用考量struct內屬性的數量。
code我都沒run過,不會動不要問我,自己改。