結構體定義須要使用 type 和 struct 語句。struct 語句定義一個新的數據類型,結構體有中一個或多個成員。type 語句設定告終構體的名稱。結構體的格式以下:ide
type struct_variable_type struct { member definition; member definition; ... member definition;}
一旦定義告終構體類型,它就能用於變量的聲明,語法格式以下:函數
variable_name := structure_variable_type {value1, value2...valuen}
若是要訪問結構體成員,須要使用點號 (.) 操做符,格式爲:"結構體.成員名"。spa
結構體類型變量使用struct關鍵字定義,實例以下:指針
package mainimport "fmt"type Books struct { title string author string subject string book_id int}func main() { var Book1 Books /* 聲明 Book1 爲 Books 類型 */ var Book2 Books /* 聲明 Book2 爲 Books 類型 */ /* book 1 描述 */ Book1.title = "Go 語言" Book1.author = "www.runoob.com" Book1.subject = "Go 語言教程" Book1.book_id = 6495407 /* book 2 描述 */ Book2.title = "Python 教程" Book2.author = "www.runoob.com" Book2.subject = "Python 語言教程" Book2.book_id = 6495700 /* 打印 Book1 信息 */ fmt.Printf( "Book 1 title : %s\n", Book1.title) fmt.Printf( "Book 1 author : %s\n", Book1.author) fmt.Printf( "Book 1 subject : %s\n", Book1.subject) fmt.Printf( "Book 1 book_id : %d\n", Book1.book_id) /* 打印 Book2 信息 */ fmt.Printf( "Book 2 title : %s\n", Book2.title) fmt.Printf( "Book 2 author : %s\n", Book2.author) fmt.Printf( "Book 2 subject : %s\n", Book2.subject) fmt.Printf( "Book 2 book_id : %d\n", Book2.book_id)}
以上實例執行運行結果爲:code
Book 1 title : Go 語言Book 1 author : www.runoob.comBook 1 subject : Go 語言教程Book 1 book_id : 6495407Book 2 title : Python 教程Book 2 author : www.runoob.comBook 2 subject : Python 語言教程Book 2 book_id : 6495700
你能夠向其餘數據類型同樣將結構體類型做爲參數傳遞給函數。並以以上實例的方式訪問結構體變量:教程
package mainimport "fmt"type Books struct { title string author string subject string book_id int}func main() { var Book1 Books /* 聲明 Book1 爲 Books 類型 */ var Book2 Books /* 聲明 Book2 爲 Books 類型 */ /* book 1 描述 */ Book1.title = "Go 語言" Book1.author = "www.runoob.com" Book1.subject = "Go 語言教程" Book1.book_id = 6495407 /* book 2 描述 */ Book2.title = "Python 教程" Book2.author = "www.runoob.com" Book2.subject = "Python 語言教程" Book2.book_id = 6495700 /* 打印 Book1 信息 */ printBook(Book1) /* 打印 Book2 信息 */ printBook(Book2)}func printBook( book Books ) { fmt.Printf( "Book title : %s\n", book.title); fmt.Printf( "Book author : %s\n", book.author); fmt.Printf( "Book subject : %s\n", book.subject); fmt.Printf( "Book book_id : %d\n", book.book_id);}
以上實例執行運行結果爲:string
Book title : Go 語言Book author : www.runoob.comBook subject : Go 語言教程Book book_id : 6495407Book title : Python 教程Book author : www.runoob.comBook subject : Python 語言教程Book book_id : 6495700
你能夠定義指向結構體的指針相似於其餘指針變量,格式以下:it
var struct_pointer *Books
以上定義的指針變量能夠存儲結構體變量的地址。查看結構體變量地址,能夠將 & 符號放置於結構體變量前:io
struct_pointer = &Book1;
使用結構體指針訪問結構體成員,使用 "." 操做符:class
struct_pointer.title;
接下來讓咱們使用結構體指針重寫以上實例,代碼以下:
package mainimport "fmt"type Books struct { title string author string subject string book_id int}func main() { var Book1 Books /* Declare Book1 of type Book */ var Book2 Books /* Declare Book2 of type Book */ /* book 1 描述 */ Book1.title = "Go 語言" Book1.author = "www.runoob.com" Book1.subject = "Go 語言教程" Book1.book_id = 6495407 /* book 2 描述 */ Book2.title = "Python 教程" Book2.author = "www.runoob.com" Book2.subject = "Python 語言教程" Book2.book_id = 6495700 /* 打印 Book1 信息 */ printBook(&Book1) /* 打印 Book2 信息 */ printBook(&Book2)}func printBook( book *Books ) { fmt.Printf( "Book title : %s\n", book.title); fmt.Printf( "Book author : %s\n", book.author); fmt.Printf( "Book subject : %s\n", book.subject); fmt.Printf( "Book book_id : %d\n", book.book_id);}
以上實例執行運行結果爲:
Book title : Go 語言Book author : www.runoob.comBook subject : Go 語言教程Book book_id : 6495407Book title : Python 教程Book author : www.runoob.comBook subject : Python 語言教程Book book_id : 6495700
main
import (
"fmt"
)
type A struct{//嵌套使用
//B
//C A沒法指定B仍是C 因此C未找到
Name
}
type B struct{//嵌套使用
Name
}
func main() {//結構體要用大括號
//a:=A{Name:"A",B:B{Name:"B"},C:C{Name:"C"}}
//a:=A{Name:"A",B:B{Name:"B"}}
//fmt.Println(a.Name)//由於A的級別高於B因此輸出字符A
//fmt.Println(a.Name,a.B.Name)
bA
bPrint
fmtPrintlnbName
cB
cPrint
fmtPrintlncName
}
b
bName
fmtPrintln
}
b
bName
fmtPrintln
}