go是一門面向過程的語言,沒有類。但是類似於c,有結構體。
go語言還有乙個神奇的地方,沒有pubic或者private。包級元素+大寫開頭=可匯出,可匯出意味著包外可訪問。
其實go裡面沒有繼承,有的只是struct的嵌入(官方叫法「嵌入」)
package inheritance
import "fmt"
type fatherclass struct
func (this fatherclass) dohello()
package inheritance
type sonclass struct
package main
import (
"./inheritance"
"fmt"
)func main()
son.name = "aaa"
son.age = 11
son.schoolname = "bbb"
son.dohello()
son.fatherclass.dohello()
fmt.println(son.dohello)
fmt.println(son.fatherclass.dohello)
}
aaa --> say **** hello
aaa --> say **** hello
0x4877f0
0x4877f0
但是值得注意的是
package main
import (
"./inheritance"
)func main()
son.name = "aaa"
son.age = 11
son.schoolname = "bbb"
son.dohello()
var father inheritance.fatherclass
father=son
father.dohello()
}
father=son會導致錯誤
cannot use son (type inheritance.sonclass) as type inheritance.fatherclass in assignment
說明go裡面的包含只是具有繼承的語法些特徵而已,並不是繼承!!!
結構體的成員變數可以是預定義型別也可以是結構體型別。
加入現在有個人,他有他自己的教育背景。我們再描述這種邏輯關係時可以使用結構體如下:
type edu_info struct
type persion struct
需要注意的是:
· 結構體的成員變數會被賦予「預設初值」。而結構體自身的「預設初值」是所有成員變數「預設初值的集合」
· 結構體的成員變數用點「.」訪問
· 最神奇的一點:對結構體值指標的點操作和對結構體值的點操作是等價的
· 如果結構體成員變數是大寫開頭的,則這個成員變數是可匯出的。可匯出意味著在包外可訪問
· 乙個聚合型別的元素不能是自身型別,但是可以是自身型別的指標。結構體也是聚合型別,同樣遵循這樣的規則。
沒有任何成員的結構體就是空結構體,它的大小為0,不包含任何資訊。空結構體通常起到了佔位的作用。
package main
import "fmt"
type edu_info struct
type persion struct
func main()
fmt.println(empty_struct)
}
結果:
0010
a school
a school
{}順序賦值
yong := persion}
對應賦值
yong_1 := persion, name: "yuyong"}
package main
import "fmt"
type edu_info struct
type persion struct
func main() }
yong_1 := persion, name: "yuyong"}
fmt.println(yong)
fmt.println(yong_1)
}
執行結果}}
匿名成員是只有型別沒有變數名的成員。
package main
import "fmt"
type edu_info struct
type position struct
type persion struct
func main() , 100, position}
yong_1 := persion, name: "yuyong"}
yong_1.position.pos_name = "hr"
yong_1.phone = "1110"
yong_1.int = 100
fmt.println(yong)
fmt.println(yong_1)
}
100 }
100 }
package main
import (
"fmt"
"strconv"
"reflect"
)type persion inte***ce
type stu struct
type teacher struct
func (t teacher) sayhello(hello_word string) string
func (s stu) sayhello(hello_word string) string
func (t teacher) say****(hello_word string) string
func (s stu) say****(hello_word string) string
func main()
}
*main.stu
&my stu name is yuyong and hello --> 0
*main.teacher
&my tech id is 1001 and hello --> 1
package main
import "fmt"
type inte***ce_1 inte***ce
type inte***ce_2 inte***ce
type class_2 struct
func (this *class_2) func_2(input string) string
func (this *class_2) func_1(input string) string
func main()
11111111111-->aaaa
22222222222-->bbbb
11111111111-->cccc
11111111111-->eeee
22222222222-->ffff
package reflect
import (
"testing"
"fmt"
)type istudent inte***ce
type schoolchild struct
func (this *schoolchild) getname() string
func (this *schoolchild) setname(_name string)
type middleschoolstudent struct
func (this middleschoolstudent) getname() string
func (this middleschoolstudent) setname(_name string)
func testtype(t *testing.t)
fmt.println(yong.getname())
var guo istudent = middleschoolstudent
fmt.println(guo.getname())
}func testcopy(t *testing.t)
var i_yong istudent = yong
i_yong.setname("feifei")
fmt.println(yong.getname())
guo := schoolchild
var i_guo istudent = &guo
i_guo.setname("benben")
fmt.println(guo.getname())
}
yuyong
guoqing
yuyong
benben
C語言第九課
主要內容 高階指標 結構體指標 一 結構體指標 指向結構體變數的指標叫做結構體指標 typedef struct student student student stu student p stu student 結構體型別的指標 型別 p 結構體指標變數 變數名 結構體訪問成員變數 示例 type...
C語言第九課
儲存類 為變數提供了5種不同的儲存型別,即儲存類 按 以下的描述 儲存時期 作用域 鏈結static 的區域性變數 活死人為靜態變數 儲存類 1 自動變數 區域性變數 2 暫存器變數 用register 宣告為 暫存器變數 3 具有 塊作用域的靜態變數 static 區域性變數 4 具有外部鏈結的靜...
C語言 第九課
一 c語言的資料型別包括基本型別 整形,字元型,浮點型 指標型別 構造型別 陣列 共用體 結構體 列舉型別 和空型別。二 結構型別的宣告格式 struct 結構名 注意 color blue 大括號最後的分號不能忘記。color 三 宣告結構變數及賦初值 struct 結構名 結構變數 四 訪問乙個...