Golang中结构体初始化的理解与求助
Golang中结构体初始化的理解与求助 大家好,
我是Go语言的新手,我参考另一个文件中的函数和结构体编写了一个小脚本。我可以通过默认的结构体初始化来运行脚本。
主脚本
package main
import (
"fmt"
"local/find"
)
func main() {
d := find.Sam{}
for i := 0; i < 100; i++ {
if find.Odd(i) {
fmt.Println("even number", i)
} else {
fmt.Println("odd number", i)
}
fmt.Println("Finding the number", d.Add(i, 2))
}
}
--------包
package find
type Sam struct {
j int
}
func Odd(a int) bool {
if a%2 == 0 {
return true
} else {
return false
}
}
func (d *Sam) Add(a, b int) int {
d.j = a + b + d.j
return d.j
}
我想将 j 初始化为 100,现在如果初始化为 10 会出错。
更多关于Golang中结构体初始化的理解与求助的实战教程也可以访问 https://www.itying.com/category-94-b0.html
2 回复
找到了解决方案,问题出在声明上,应该使用大写字母。
package find
type Sam struct {
J int
}
func Odd(a int) bool {
if a%2 == 0 {
return true
} else {
return false
}
}
func (d *Sam) Add(a, b int) int {
d.J = a + b + d.J
return d.J
}
package main
import (
"fmt"
"local/find"
)
func main() {
d := find.Sam{J: 300}
for i := 0; i < 100; i++ {
if find.Odd(i) {
fmt.Println("even number", i)
} else {
fmt.Println("odd number", i)
}
fmt.Println("Finding the number", d.Add(i, 2))
}
}
更多关于Golang中结构体初始化的理解与求助的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
在Go语言中,结构体字段默认初始化为零值。你的Sam结构体中的j字段是int类型,默认初始化为0。要将其初始化为特定值,有几种方法:
方法1:使用结构体字面量初始化
package main
import (
"fmt"
"local/find"
)
func main() {
// 初始化j为100
d := find.Sam{j: 100}
for i := 0; i < 100; i++ {
if find.Odd(i) {
fmt.Println("even number", i)
} else {
fmt.Println("odd number", i)
}
fmt.Println("Finding the number", d.Add(i, 2))
}
}
方法2:创建构造函数
在find包中添加构造函数:
package find
type Sam struct {
j int
}
// 构造函数,可以设置初始值
func NewSam(initialValue int) *Sam {
return &Sam{j: initialValue}
}
func Odd(a int) bool {
return a%2 == 0
}
func (d *Sam) Add(a, b int) int {
d.j = a + b + d.j
return d.j
}
然后在主程序中使用:
package main
import (
"fmt"
"local/find"
)
func main() {
// 使用构造函数初始化j为100
d := find.NewSam(100)
for i := 0; i < 100; i++ {
if find.Odd(i) {
fmt.Println("even number", i)
} else {
fmt.Println("odd number", i)
}
fmt.Println("Finding the number", d.Add(i, 2))
}
}
方法3:直接修改字段
如果j字段是导出的(首字母大写),可以直接设置:
package find
type Sam struct {
J int // 首字母大写,导出字段
}
func Odd(a int) bool {
return a%2 == 0
}
func (d *Sam) Add(a, b int) int {
d.J = a + b + d.J
return d.J
}
package main
import (
"fmt"
"local/find"
)
func main() {
d := &find.Sam{J: 100} // 直接设置初始值
for i := 0; i < 100; i++ {
if find.Odd(i) {
fmt.Println("even number", i)
} else {
fmt.Println("odd number", i)
}
fmt.Println("Finding the number", d.Add(i, 2))
}
}
注意:你的Odd函数逻辑有误,判断偶数的函数返回true,但打印的是"even number",这会导致逻辑相反。正确的Odd函数应该是:
func Odd(a int) bool {
return a%2 != 0 // 奇数返回true
}
或者重命名为IsEven:
func IsEven(a int) bool {
return a%2 == 0 // 偶数返回true
}

