有关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 ", 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.其他与面向对象编程类似