// 其他的包。。。。。。。。。。。。。。。。。
//teacher01只能在本文件引用,英文首字母小寫(xiě)
type teacher01 struct {
Id int
Name string
Course string
Sex string
}
//Teacher02可以在任意文件引用,英文首字母大寫(xiě)
type Teacher02 struct {
ID int
Name string
Course string
sex string
}
//備注:
//1)訪問(wèn)teacher01的時(shí)候,err, cannot refer to unexported name 包名.teacher01
//2)訪問(wèn)Teacher02.sex的時(shí)候,err, implicit assignment of unexported field 'sex' in 包名.Teacher02 literal
//3) 修改Teacher02.sex的時(shí)候, 修改sex報(bào)錯(cuò),//err, 結(jié)構(gòu)體變量.sex undefined (cannot refer to unexported field or method sex)
// code_015_struct_firstTime project main.go
package main
import (
"fmt"
)
type Student struct {
id int
name string
sex byte
age int
addr string
}
func printStudentValue(tmp Student) {
tmp.id = 250
fmt.Println("printStudentValue tmp =", tmp)
}
func main() {
/*
1)重要的事情說(shuō)三遍:Go語(yǔ)言中沒(méi)有封裝、繼承、多態(tài)等概念,但同樣通過(guò)別的方式實(shí)現(xiàn)這些特性.
封裝:通過(guò)方法實(shí)現(xiàn);繼承:通過(guò)匿名字段實(shí)現(xiàn);多態(tài):通過(guò)接口實(shí)現(xiàn)
2)如果結(jié)構(gòu)體的全部成員都是可以比較的,那么結(jié)構(gòu)體也是可以比較的,那樣的話兩個(gè)結(jié)構(gòu)體將可以使用 == 或 != 運(yùn)算符進(jìn)行比較,但不支持 > 或 < 。
3)
*/
//1)順序初始化。
var s1 Student = Student{1, "ck_god", 0, 27, "sz"}
s2 := Student{2, "god_girl", 1, 23, "sz"}
//s3 := Student{3, "stranger", "m", 20, "sz"} //報(bào)錯(cuò), 性別為byte類(lèi)型的數(shù)據(jù),只有0或者1
//s4 := Student{3, "stranger0", 1, 20} //報(bào)錯(cuò),非指定初始化,必須每個(gè)成員都初始化
// fmt.Printf(s1, s2) //報(bào)錯(cuò),非字符串類(lèi)型不可打印
fmt.Println(s1, s2) //Println可以訪問(wèn)
fmt.Printf("%T,%T", s1, s2)
fmt.Println("")
fmt.Printf("%v,%v", s1, s2)
//2) 指定成員初始化
fmt.Println("")
s5 := Student{id: 2, name: "laowang"} //未初始化的成員為零值
//s5.id,如果Student.id則報(bào)錯(cuò)---》沒(méi)有id這個(gè)method
//3)訪問(wèn)結(jié)構(gòu)體的成員變量
fmt.Printf("id=%d,name=%s,sex=%c,age=%d,addr=%s",
s5.id, s5.name, s5.sex, s5.age, s5.addr)
//4) struct的指針變量
fmt.Println("")
var s8 *Student = &Student{8, "wck", 1, 20, "sz"}
s9 := &Student{9, "god_god", 0, 21, "sz"}
fmt.Printf("%v,%v", s8, s9)
//5) struct的成員變量賦值
fmt.Println("")
var s10 Student
s10.id = 2
s10.name = "哈哈"
s10.sex = 0
fmt.Println(s10)
//6)=======================結(jié)構(gòu)體變量為指針變量
s11 := new(Student)
s11.id = 11
s11.name = "www"
fmt.Println(s11)
//7)普通變量和指針變量類(lèi)型打印
var s12 Student = Student{4, "mmm", 1, 20, "sh"}
fmt.Printf("s12=%v,&s12=%v\n", s12, &s12)
//8)獲取成員的兩種方式
var p *Student = &s12
//p.成員和(*p).成員操作是等價(jià)的
p.id = 15
(*p).name = "zzz"
fmt.Println(p, *p, s12)
//9)結(jié)構(gòu)體作為函數(shù)參數(shù)之值傳遞
var s13 Student = Student{1, "shenzhenbei", 1, 18, "sz"}
printStudentValue(s13) //值傳遞,形參的修改不會(huì)影響到實(shí)體
fmt.Println("main s=", s13)
//10)結(jié)構(gòu)體作為函數(shù)參數(shù)之引用傳遞
printStudentPointer(&s13)
fmt.Println("main s=", s13)
//11) 結(jié)構(gòu)體成員的可見(jiàn)性,如文頭所述。
}
func printStudentPointer(p *Student) {
p.id = 250
fmt.Println("printStudentPointer p = ", p)
}
輸出結(jié)果如下:
創(chuàng)新互聯(lián)建站自2013年創(chuàng)立以來(lái),是專(zhuān)業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目做網(wǎng)站、網(wǎng)站制作網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢(mèng)想脫穎而出為使命,1280元蔡甸做網(wǎng)站,已為上家服務(wù),為蔡甸各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:028-86922220
{1 ck_god 0 27 sz} {2 god_girl 1 23 sz}
main.Student,main.Student
{1 ck_god 0 27 sz},{2 god_girl 1 23 sz}
id=2,name=laowang,sex=
&{8 wck 1 20 sz},&{9 god_god 0 21 sz}
{2 哈哈 0 0 }
&{11 www 0 0 }
s12={4 mmm 1 20 sh},&s12=&{4 mmm 1 20 sh}
&{15 zzz 1 20 sh} {15 zzz 1 20 sh} {15 zzz 1 20 sh}