英文:
GoLang print value of variables in structure
问题
我不是GoLang的专家,但我需要在一个项目上进行故障排除。
现在我尝试打印相同变量的值,但输出的是地址而不是值:
attrs := core.Attributes{}
err = rtrV1.SetAttributesStruct(&attrs, sessAttrs, session.NasIP, ipv4Session, ipv6Session)
if err1, ok := err.(core.SessionNotFoundError); ok {
apiH.Logger.Info(err1.Error())
c.JSON(404, gin.H{"message": err.Error()})
return
} else if err != nil {
apiH.Logger.Error(err.Error())
c.JSON(500, gin.H{"message": "internal error"})
return
}
err = core.MakeNASProxyRequest(apiH.HttpClient, nasproxyHost, nasproxyPort, authToken, attrs)
debugAttrs := fmt.Sprintf("%+p", attrs)
debugAttrs2 := fmt.Sprintf("%+v", attrs)
apiH.Logger.Info("attrs:"+ " " + debugAttrs, log.Field("type", "serve-request"))
apiH.Logger.Info("attr2:"+ " " + debugAttrs2, log.Field("type", "serve-request"))
我需要打印attrs
,但我得到了这个输出:
"msg":"attrs: %!p(core.Attributes={+0xc000420460 <nil> <nil> +0xc000238c60 <nil> <nil> <nil> <nil> +0xc000238c98 <nil> <nil> <nil> <nil>})"
"msg":"attr2: {NASIPAddress:0xc000420460 NASIdentifier:<nil> NASIPv6Address:<nil> Username:0xc000238c60 NASPort:<nil> FramedIPAddress:<nil> CalledStationID:<nil> CallingStationID:<nil> AcctSessionID:0xc000238c98 AcctMultiSessionID:<nil> NASPortID:<nil> FramedInterfaceID:<nil> FramedIPv6Prefix:<nil>}"
如何打印出值?
谢谢帮助。
英文:
I'm not very expert of GoLang, but I need to run troubleshooting on a project.
Now I'm try to print the value of same variables, but I receive as output the address and not the value:
attrs := core.Attributes{}
err = rtrV1.SetAttributesStruct(&attrs, sessAttrs, session.NasIP, ipv4Session, ipv6Session)
if err1, ok := err.(core.SessionNotFoundError); ok {
apiH.Logger.Info(err1.Error())
c.JSON(404, gin.H{"message": err.Error()})
return
} else if err != nil {
apiH.Logger.Error(err.Error())
c.JSON(500, gin.H{"message": "internal error"})
return
}
err = core.MakeNASProxyRequest(apiH.HttpClient, nasproxyHost, nasproxyPort, authToken, attrs)
debugAttrs := fmt.Sprintf("%+p", attrs)
debugAttrs2 := fmt.Sprintf("%+v", attrs)
apiH.Logger.Info("attrs:"+" "+debugAttrs, log.Field("type", "serve-request"))
apiH.Logger.Info("attr2:"+" "+debugAttrs2, log.Field("type", "serve-request"))
I need to print attrs
but I receive this output:
"msg":"attrs: %!p(core.Attributes={+0xc000420460 <nil> <nil> +0xc000238c60 <nil> <nil> <nil> <nil> +0xc000238c98 <nil> <nil> <nil> <nil>})"
"msg":"attr2: {NASIPAddress:0xc000420460 NASIdentifier:<nil> NASIPv6Address:<nil> Username:0xc000238c60 NASPort:<nil> FramedIPAddress:<nil> CalledStationID:<nil> CallingStationID:<nil> AcctSessionID:0xc000238c98 AcctMultiSessionID:<nil> NASPortID:<nil> FramedInterfaceID:<nil> FramedIPv6Prefix:<nil>}"
How can print the value?
Thanks for the help
答案1
得分: 3
你可以使用深度漂亮打印器。导入:github.com/davecgh/go-spew/spew
示例:
spew.Dump(attrs)
英文:
you can use deep pretty printer. Import: github.com/davecgh/go-spew/spew
Example:
spew.Dump(attrs)
答案2
得分: 3
你可以使用fmt
包或JSON编组来打印结构体的值...
例如:
import "fmt"
type Person struct {
FirstName string
}
func main() {
p := &Person{"mr1"}
fmt.Printf("%+v", p)
}
或者
import (
"encoding/json"
"fmt"
)
type Person struct {
FirstName string
}
func main() {
p := &Person{"mr1"}
s, _ := json.Marshal(p)
fmt.Printf("%s\n", s)
}
英文:
you can use fmt
package or JSON marshaling to print the struct values...
for examples
import "fmt"
type Person struct {
FirstName string
}
func main() {
p := &Person{"mr1"}
fmt.Printf("%+v", p)
}
or
import (
"encoding/json"
"fmt"
)
type Person struct {
FirstName string
}
func main() {
p := &Person{"mr1"}
s, _ := json.Marshal(p)
fmt.Printf("%s\n", s)
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论