iT邦幫忙

0

[已解決] Golang 拿 Struct 來組字串問題

  • 分享至 

  • xImage

大概如下

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

覺得這樣寫很笨,有什麼好方法嗎?謝謝

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

0
froce
iT邦大師 1 級 ‧ 2020-04-27 08:35:11
最佳解答

不靠第三方或反射大概也只能這樣:

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

vicentli iT邦研究生 4 級 ‧ 2020-04-28 20:15:12 檢舉

感謝您,已包到 struct 方法裡了。最後決定用組的就好,因為目前需求用途簡單,效能重要。再謝謝提供的第二個方法,用在通用func話,泛用性比較廣

我要發表回答

立即登入回答