有关Go语言的面向对象编程,看了几本书,看了若干例子也没有太明白。太惭愧啊!
后来看了一个例子,结合之前书上的内容,总算有点头绪了。
然而,自己的程序写出来编译后还是出来不少问题。
后来,在已有的程序的基础上,稍加改进,终于明白了一些问题。
有关Go语言的面向对象编程,编过一个之后,就不困难了,只需要注意若干细节就可以了。
Go语言与C语言、C++语言和Java语言还是有差异的,需要慢慢体会。
这里编写了一个素数对象程序,包括使用该对象的程序。虽然不是很完善,但是麻雀虽小五脏俱全,在这基础上可以演变出各种各样的面向对象的Go语言程序。这是一个样例!
Go语言程序(面向对象程序):
// myprime project myprime.go
package myprime
import (
"math"
)
const MAXN int = 800
const PRIME_NUM int = 139
type MyPrime struct {
pflag [MAXN + 1]bool
prime [PRIME_NUM + 1]int
}
func (mp *MyPrime) ESieve(n int) {
mp.pflag[2] = true
for i := 3; i <= n; i += 2 {
mp.pflag[i] = true
}
end := int(math.Sqrt(float64(n)))
for i := 3; i <= end; i += 2 {
step := i + i
if mp.pflag[i] {
j := i + step
for j <= n {
mp.pflag[j] = false
j += step
}
}
}
j := 2
mp.prime[0] = 1
mp.prime[1] = 2
for i := 3; i <= n; i += 2 {
if mp.pflag[i] {
mp.prime[j] = i
j++
}
}
}
func (mp *MyPrime) Init() {
mp.ESieve(MAXN)
}
func (mp *MyPrime) GetPrime(n int) int {
return mp.prime[n]
}
func (mp *MyPrime) GetPrimeNum() int {
return PRIME_NUM
}
Go语言主程序(使用对象的程序):
// mytest project main.go
package main
import (
"fmt"
"myprime"
)
func main() {
mp := new(myprime.MyPrime)
mp.Init()
for i := 1; i <= mp.GetPrimeNum(); i++ {
fmt.Printf("%d: %d\n", i, mp.GetPrime(i))
}
}
程序运行结果:
1: 2
2: 3
3: 5
4: 7
5: 11
6: 13
7: 17
8: 19
9: 23
10: 29
11: 31
12: 37
13: 41
14: 43
15: 47
16: 53
17: 59
18: 61
19: 67
20: 71
21: 73
22: 79
23: 83
24: 89
25: 97
26: 101
27: 103
28: 107
29: 109
30: 113
31: 127
32: 131
33: 137
34: 139
35: 149
36: 151
37: 157
38: 163
39: 167
40: 173
41: 179
42: 181
43: 191
44: 193
45: 197
46: 199
47: 211
48: 223
49: 227
50: 229
51: 233
52: 239
53: 241
54: 251
55: 257
56: 263
57: 269
58: 271
59: 277
60: 281
61: 283
62: 293
63: 307
64: 311
65: 313
66: 317
67: 331
68: 337
69: 347
70: 349
71: 353
72: 359
73: 367
74: 373
75: 379
76: 383
77: 389
78: 397
79: 401
80: 409
81: 419
82: 421
83: 431
84: 433
85: 439
86: 443
87: 449
88: 457
89: 461
90: 463
91: 467
92: 479
93: 487
94: 491
95: 499
96: 503
97: 509
98: 521
99: 523
100: 541
101: 547
102: 557
103: 563
104: 569
105: 571
106: 577
107: 587
108: 593
109: 599
110: 601
111: 607
112: 613
113: 617
114: 619
115: 631
116: 641
117: 643
118: 647
119: 653
120: 659
121: 661
122: 673
123: 677
124: 683
125: 691
126: 701
127: 709
128: 719
129: 727
130: 733
131: 739
132: 743
133: 751
134: 757
135: 761
136: 769
137: 773
138: 787
139: 797
程序说明:
1.需要创建一个包项目,包名为myprime
2.需要定义一个结构,结构名为MyPrime,对象的变量放在结构体中
3.定义若干方法,似乎方法名需要以大写字符开头
4.主程序中的对象变量,照猫画虎即可("mp := new(myprime.MyPrime)"),需要用new
5.有了对象,就可以调用方法了
6.其他与面向对象编程类似