大概如下
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過,不會動不要問我,自己改。