1. å®ä¹
ç»æä½æ¯å°å¦ä¸ªæè å¤ä¸ªä»»æç±»åçå½ååéç»åå¨ä¸èµ·çèåæ°æ®ç±»åã
2. æååé
è®¿é®æ§å¶æºå¶å¦æä¸ä¸ªç»æä½çæååéåç§°æ¯é¦åæ¯å¤§äºçï¼é£ä¹è¿ä¸ªå鿝å¯å¯¼åºçï¼å³å¨å ¶ä»å å¯ä»¥è®¿é®å°ï¼ã
ä¸ä¸ªç»æä½å¯ä»¥åæ¶å å«å¯å¯¼åºåä¸å¯å¯¼åºçæååé
type A struct {
Hour int //å¯å¯¼åº
minute int //ä¸å¯å¯¼åº
å½åç»æä½ç±»åsä¸å¯ä»¥å®ä¹ä¸ä¸ªæ¥æç¸åç»æä½ç±»åsçæååéï¼ä¹å°±æ¯ä¸ä¸ªèåç±»åä¸å¯ä»¥å
å«å®èªå·±ã使¯sä¸å¯ä»¥å®ä¹ä¸ä¸ªsçæéç±»åï¼å³*sãå¦ä¸ï¼
type B struct {
value int
//Next B //é误
Next *B //æ£ç¡®
3. ç»æä½æ¯è¾
å¦æç»æä½çæææååéé½å¯ä»¥æ¯è¾ï¼é£ä¹è¿ä¸ªç»æä½æ¯å¯ä»¥æ¯è¾çãä¸¤ä¸ªç»æä½çæ¯è¾å¯ä»¥ä½¿ç¨==æè
!=ã
type C struct {
A int
B string
c1 := C{A:1, B:"abc"}
c2 := C{A:1, B:"abc"}
c3 := C{A:2, B:"abc"}
fmt.Println(c1.A == c2.A && c1.B == c2.B) //true
fmt.Println(c1 == c2) //true ä¸ä¸çä»·
fmt.Println(c1.A == c3.A && c1.B == c3.B) //false
fmt.Println(c1 == c3) //false ä¸ä¸çä»·
2.åå
¶ä»å¯æ¯è¾çç±»å䏿 ·ï¼å¯æ¯è¾çç»æä½ç±»åé½å¯ä»¥ä½ä¸ºmapçé®ç±»åã
type C struct {
A int
B string
mp := make(map[C]int)
key := C{A:1, B:"abc"}
mp[key] = 9
fmt.Println(mp[C{A:1, B:"abc"}]) //9
4. ç»æä½åµå¥åå¿åæå
goå
许æä»¬å®ä¹ä¸å¸¦åç§°çç»æä½æåï¼åªéè¦æå®ç±»åå³å¯ï¼è¿ç§ç»æä½æåç§°ä½å¿åæåãè¿ä¸ªç»æä½æåçç±»åå¿
é¡»æ¯ä¸ä¸ªå½åç±»åæè
æåå½åç±»åçæéãæ£æ¯å 为æäºè¿ç§ç»æä½åµå¥çåè½ï¼æä»¬æè½ç´æ¥è®¿é®å°æä»¬éè¦çåéè䏿¯æå®ä¸å¤§ä¸²ä¸é´åéã
type Point struct {
X int
Y int
type Circle struct {
Point
var c Circle
c.X = 10 //çä»·äº c.Point.X = 10
c.Y = 10 //çä»·äº c.Point.Y = 10
type Wheel struct {
*Point
ç»æä½åé¢éåå§å没æå¿«æ·æ¹å¼ï¼å¿
é¡»éµå¾ªå½¢ç¶ç±»åçå®ä¹ã
type Point struct {
X int
Y int
type Circle struct {
Point
var c Circle
c = Circle{1,1} //é误
c = Circle{Point{1,1}} //æ£ç¡®
c = Circle{Point: Point{1,1}} //æ£ç¡®
3.å 为âå¿åæåâæ¥æéå¼çååï¼æä»¥ä½ ä¸è½å¨ä¸ä¸ªç»æä½éé¢å®ä¹ä¸¤ä¸ªç¸åç±»åçå¿åæåï¼å¦åä¼å¼èµ·å²çªãç±äºå¿åæåçå忝ç±å®ä»¬çç±»åå³å®çï¼å æ¤å®ä»¬çå¯å¯¼åºæ§ä¹æ¯ç±ä»ä»¬ççç±»åå³å®ãå¨ä¸é¢çä¾åä¸ï¼pointåcircleè¿ä¸¤ä¸ªå¿åæåæ¯å¯å¯¼åºçï¼å³ä½¿è¿ä¸¤ä¸ªç»æä½æ¯ä¸å¯å¯¼åºçï¼pointåcircleï¼ã
type point struct {
X int
Y int
type circle struct {
point
type Wheel struct {
circle
var w Wheel
w.X = 8 // çä»·äº w.circle.point.X = 8, w.Xæ¯å¯å¯¼åºçï¼w.circle.point.Xæ¯ä¸å¯å¯¼åºç
5. ç»æä½æ¹æ³
æ¹æ³ç声æåæ®é彿°ç声æç±»ä¼¼ï¼ç¥è¯å¨å½æ°åååé¢å¤å äºä¸ä¸ªåæ°ãè¿ä¸ªåæ°æè¿ä¸ªæ¹æ³ç»å®å°è¿ä¸ªåæ°å¯¹åºçç±»åä¸ã
éå çåæ°pæä¸ºæ¹æ³çæ¥æ¶è
ï¼ å®æºäºæ©å
çé¢å对象è¯è¨ï¼ç¨æ¥æè¿°ä¸»è°æ¹æ³å对象åéæ¶æ¯ã
type Point struct {
X int
Y int
func (p Point) print() {
fmt.Println(p.X, p.Y)
æ¹æ³å®ä¹éå¶
goå许å¤å
¶ä»é¢å对象çè¯è¨ä¸åï¼å®å¯ä»¥å°æ¹æ³ç»å®å°é¤äºæéç±»å忥å£ç±»åçä»»ä½ç±»åä¸ãå¯ä»¥å¾æ¹ä¾¿ç为ç®åçç±»åï¼å
¥æ´å½¢ãå符串ãsliceãmapãçè³å½æ°çï¼å®ä¹éå çè¡ä¸ºã
type III int
func (i III) print() {
fmt.Println(i)
func Test() {
fmt.Println("test")
type FunT func()
func (f FunT) Print() {
fmt.Println(f)
func main() {
var f FunT
f = Test
f.Print()
æéæ¥æ¶è
çæ¹æ³
ç±äºä¸»è°å½æ°ä¼å¤å¶æ¯ä¸ä¸ªå®ååéï¼æè
妿ä¸ä¸ªå®å太大èæä»¬å¸æé¿å
å¤å¶æ´ä¸ªå®åï¼å æ¤æä»¬å¿
é¡»ä½¿ç¨æéæ¥ä¼ éåéçå°åãè¿ä¹åæ ·éç¨äºæ´æ°æ¥æ¶è
æä»¬å°å®ç»å®å°æéç±»åãå¨è°ç¨æ¹æ³çæ¶åï¼ç¼è¯å¨ä¼å¯¹åéè¿è¡éå¼è½¬æ¢ã
æ»ç»ä¸ä¸ç»æä½æ¹æ³å¯ä»¥æåè°ç¨çæ¡ä»¶ï¼
å®åæ¥æ¶è
å形忥æ¶è
æ¯åä¸ç±»åï¼æ¯å¦é½æ¯Tæè
齿¯*Tãï¼1ï¼4ï¼5ï¼7ï¼
å®åæ¥æ¶è
æ¯Tç±»åçåéè形忥æ¶è
æ¯*Tç±»åï¼ç¼è¯å¨ä¼éå¼çè·ååéçå°åï¼3ï¼ã
å®åæ¥æ¶è
æ¯Tç±»åè形忥æ¶è
æ¯Tç±»åï¼ç¼è¯å¨ä¼éå¼çè·åå®é
çåå¼ãï¼2ï¼6ï¼
å
¶ä¸8ç¼è¯è¿ç¨æ¥éçåå æ¯ï¼ç¼è¯å¨å¯¹Tç±»å转å为Tç±»åçéå¼è½¬åï¼åªæå®åæ¥æ¶è
æ¯åéæå¯ä»¥æåï¼å ä¸ºæ æ³è·å临æ¶åéçå°åã
type Point struct {
X int
Y int
func (p Point) Print() {
fmt.Println(p.X, p.Y)
func (p *Point) ScaleBy(factor int) {
p.X *= factor
p.Y *= factor
func main() {
p := Point{1,1}
ptr := &p
p.Print() //1. æ£ç¡®
ptr.Print() //2. æ£ç¡®
p.ScaleBy(2) //3. æ£ç¡®
ptr.ScaleBy(2) //4. æ£ç¡®
Point{1,1}.Print() //5. æ£ç¡®
(&Point{1,1}).Print() //6. æ£ç¡®
(&Point{1,1}).ScaleBy( 2) //7. æ£ç¡®
Point{1,1}.ScaleBy( 2) //8. é误
nilæ¯ä¸ä¸ªåæ³çæ¥æ¶è
ï¼å°±åä¸äºå½æ°å
许nilæéä½ä¸ºå®åï¼æ¹æ³çæ¥æ¶è
å
许æ¯nilæé
type A struct {
Data int
func (a *A) FunPtrA() {
fmt.Println("FunPtrA")
func main() {
var ptrA *A
ptrA = nil
ptrA.FunPtrA() //FunPtrA
4. éè¿ç»æä½å
åµç»æç±»å
è¿é主è¦è®¨è®ºå
åµç»æä½åç»æä½æéåï¼å¯¹äºæºç»æä½å®ä¹å½æ°çè®¿é®æéã
type A struct {
Data int
func (a A) FunA() {
fmt.Println(a.Data)
func (a *A) FunPtrA1() {
fmt.Println("FunPtrA1")
func (a *A) FunPtrA2() {
fmt.Println("FunPtrA2")
fmt.Println(a.Data)
type B struct {
type C struct {
func main() {
var b B
b.FunA() //å¯ä»¥è®¿é®
b.FunPtrA1() //å¯ä»¥è®¿é®
b.FunPtrA2() //å¯ä»¥è®¿é®
var c C
//c.FunA() //ä¸å¯è®¿é®
c.FunPtrA1() //å¯ä»¥è®¿é®
//c.FunPtrA2() //ä¸å¯è®¿é®
c.A = &A{}
c.FunA() //å¯ä»¥è®¿é®
c.FunPtrA1() //å¯ä»¥è®¿é®