<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                > ### 例子一 ~~~ package demo11 import ( "fmt" "encoding/json" ) type User struct { name string age int } func NewUser(name string, age int) *User { var user *User = &User{name, age} return user } type exam struct { number1 int number2 int number3 int number4 int } type student struct { grade int subject string *people } type people struct { name string age int } type message struct { Id int `json:"user_id",db:"user_id"` Title string `db:"user_title"` Content1 string content2 string //小寫私有, 別的包是無法訪問的 } func Demo11() { //new(User) 和 &User{} 本質上是一樣的,都是返回結構體地址 var user1 *User = new(User) fmt.Printf("%p\n", user1) var user2 *User = &User{} fmt.Printf("%p\n", user2) var user3 User fmt.Printf("%v\n", user3) //結構體里的字段占用一段連續的內存空間 //%p 十六進制表示,前綴 0x var exam *exam = &exam{} fmt.Printf("%p\n", &exam.number1) fmt.Printf("%p\n", &exam.number2) fmt.Printf("%p\n", &exam.number3) fmt.Printf("%p\n", &exam.number4) //結構體沒有構造函數, 可以自己實現 //構造函數 ,是一種特殊的方法。主要用來在創建對象時初始化對象, 即為對象成員變量賦初始值 var user4 *User = NewUser("張三", 25) fmt.Printf("%v\n", user4) //匿名字段默認采用類型名作為字段名 //結構體嵌套 var student1 student student1.people = &people{ name: "李四", age: 15, } fmt.Printf("%#v \n %#v \n", student1, student1.people) var student2 student //未初始化默認指向空的內存 student2.people = &people{} student2.name = "王五" student2.age = 16 fmt.Printf("%#v \n %#v \n", student2, student2.people) //tag是結構體的原信息, 可以在運行時通過反射的機制讀取出來 msg1 := &message{ Id: 1, Title: "標題1", Content1: "內容1", content2: "內容2", } data, _ := json.Marshal(msg1) fmt.Println(string(data)) } ~~~ > ### 例子二 ~~~ package demo12 import ( "fmt" "encoding/json" ) //Go的方法是在函數前面加上一個接受者, 這樣編譯器就知道這個方法屬于哪個類型了 //函數不屬于任何類型, 方法屬于特定的類型 type User struct { name string age int content string } //可以為當前包定義的類型添加方法 type User2 int //什么時候用值類型/指針類型作為接受者? //需要修改接受者中的值; 接受者是大對象的時候,副本拷貝代價比較大; 通常使用指針類型作為接受者 func (u *User) Msg(name string, age int) { u.name = name u.age = age } func (u User) Say() { fmt.Printf("name:%s-age:%d\n", u.name, u.age) } //匿名函數體與繼承 //json在線解析 //json反序列話 type User3 struct { Work string Content string *People } type People struct { Name string Age int } func Demo12() { var user3 = User3{ Work: "student", Content: "Hello World", People: &People{ Name: "張三", Age: 18, }, } fmt.Printf("%+v\r", user3) //字段名要大寫, 不然其它包無法訪問 data, _ := json.Marshal(user3) fmt.Println(string(data)) //反序列化的 對象 與序列化的對象保持相同類型 var data2 User3 json.Unmarshal(data, &data2) //\r - carriage return, 回車就是輸出光標回到本行的開頭位置 //\n - new line, 而換行是移動到下一行 /* *** \r _ *** \n ***_ _ *** \n\r ***_ _ */ //不同運行環境對 CR/LF 的解釋表達不完全一致(就是不同操作系統,編輯器對\r \n 處理不同), a := 1 fmt.Printf("111-%d \r", a) fmt.Printf("222-%d \r", a) fmt.Printf("333-%d \r", a) } ~~~ > ### 例子三 ~~~ package main import "fmt" type Human interface { Content() } type Teacher struct { Name string TeacherSubject string } type Student struct { Name string Score float32 } func (t *Teacher) Content() { fmt.Printf("Teacher: my name is %s, teachering %s \r\n", t.Name, t.TeacherSubject) } func (s *Student) Content() { fmt.Printf("Student: my name is %s, score %.1f \r\n", s.Name, s.Score) } func SayContent(h Human) { h.Content() } func main() { fmt.Println("Begin Say") //new(Teacher) 和&Teacher{} 本質上是一樣的,都是返回結構體地址 t := new(Teacher) t = &Teacher{Name: "張三", TeacherSubject: "計算機"} SayContent(t) s := &Student{Name: "李四", Score: 80.5} SayContent(s) } ~~~
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看