2014-11-15 35 views
1

我有需要在mips和x86上運行的代碼。爲了使事情更容易,我實現了具有相同名稱的功能,並且在mylib_x86.gomylib_mips.go中也獲得了在兩個平臺上構建和工作的代碼。以下是一些代碼片段,顯示我的結構佈局。體系結構特定結構的通用變量

在試圖進一步優化我的代碼,我宣佈爲每個平臺單獨結構中common.go

// lib/common.go: 

// Struct for mips 
type MipsData struct { 
     var1 string 
     var2 string 
     var3 string 
} 

// Struct for x86 
type X86Data struct { 
     var2 string 
     var3 string 
} 

我想通過查詢main()runtime.GOARCH但範圍以聲明的架構相關的結構可變data被限制到每個塊,由此導致一個編譯錯誤是這樣的:error: reference to undefined name 'data'

import "lib" 
import "strings" 
import "runtime" 

func main() { 

    if strings.HasPrefix(runtime.GOPATH, "mips") { 
     data := common.MipsData{ 
      var1: "Mips", 
      var2: "Something", 
      var3: "Else", 
     } 
    } else if strings.HasPrefix(runtime.GOPATH, "amd64") { 
     data := common.X86Data{ 
      var2: "Something", 
      var3: "Else", 
     } 
    } 
    text, err := json.MarshalIndent(data, "", " ") 
    // Write text to a file. 

} 

是否有可能定義data作爲main()中的通用數據類型來克服編譯錯誤?有沒有其他有效的方法來解決這個問題?

感謝

回答

2

如果你只是想將這些結構傳遞到json.MarshalIndent,簡單的解決方法是聲明變量if語句之外如下:

var data interface{} 

這將是能夠存儲任何結構,並且是json.MarshalIndent預期的類型。如果您想要執行更多可以在任一結構上工作的操作,請考慮定義由每個結構實現的接口,然後使用它。

+0

正是我需要的答案。非常感謝。 – linuxfan