亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

傳遞結構.

傳遞結構.

Go
慕沐林林 2021-12-07 18:51:49
我是 Ruby 背景的新手。我試圖在沒有類的世界中理解代碼結構,并且可能犯了一個錯誤,希望在 Go 中以“Ruby 方式”進行。我正在嘗試重構我的代碼以使其更具模塊化/可讀性,因此我將配置文件的加載移動到了它自己的包中。好主意?package configurationimport "github.com/BurntSushi/toml"type Config struct {    Temperatures []struct {        Degrees int        Units string    }}func Load() Config {    var cnf Config    _, err := toml.DecodeFile("config", &cnf)    if err != nil {        panic(err)    }    return cnf}現在,在我的主包中:package mainimport "./configuration"var conf Configuration = configuration.Load()給undefined: Config。我明白為什么。我可以復制主包中的結構定義,但這不是很 DRY。我的理解是,像這樣傳遞結構體是一種不好的做法,因為它會使您的代碼更難理解(現在每個人都需要了解我的 Config 結構體)。在 Go 中像我試圖在這里做的那樣將邏輯隱藏在包中是一個好主意嗎?如果是這樣,傳遞這個 Config 結構的“Go”方式是什么?
查看完整描述

3 回答

?
富國滬深

TA貢獻1790條經驗 獲得超9個贊

在您的主包中,您應該指定

var conf configuration.Config = configuration.Load()

configuration指的是您導入的包,并且Config是從該包中導出的結構(大寫名稱)。但是你也可以省略這個,因為可以推斷類型

var conf = configuration.Load()

作為旁注:請不要使用相對導入


查看完整回答
反對 回復 2021-12-07
?
達令說

TA貢獻1821條經驗 獲得超6個贊

在 Go 導入中你總是聲明你包的完整路徑,不要在導入中使用相對路徑,最好的例子是import "github.com/BurntSushi/toml"存在于以下位置的toml 導入:GOPATH/src/github.com/BurntSushi/toml GOPATH/pkg/_/github.com /BurntSushi/toml


然后構建你的包和 main.go


package main


import "mypackage/configuration"


func main() {

   // configuration contain all funcs & structs 

   var conf configuration.Config = configuration.Load()

}

去它不是紅寶石。


參考包:https : //golang.org/doc/code.html


查看完整回答
反對 回復 2021-12-07
?
白衣染霜花

TA貢獻1796條經驗 獲得超10個贊

為什么不直接導入配置包,然后做 Go 的變量聲明/實例化快捷方式呢?也許我錯過了一些東西。


package main


import "mypackage/configuration"


func main() {

   conf := configuration.Load()

}


查看完整回答
反對 回復 2021-12-07
  • 3 回答
  • 0 關注
  • 219 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號