【golang】golang中結構體的初始化方法(new方法)


准備工作:

  定義結構體:Student

 
         
import (
"fmt"
"reflect"
)

type Student struct {
    StudentId      string `json:"sid"`
    StudentName    string `json:"sname"`
    StudentClass   string `json:"class"`
    StudentTeacher string `json:"class"`
}

測試代碼如下:

  

func main() {
    s0 := Student{}
    fmt.Println(s0)
    fmt.Println(reflect.TypeOf(s0))

    s1 := new(Student)
    fmt.Println(s1)
    fmt.Println(reflect.TypeOf(s1))

    s2 := &Student{}
    fmt.Println(s2)
    fmt.Println(reflect.TypeOf(s2))

    s3 := &Student{"", "", "100", "200"}
    fmt.Println(s3)
    fmt.Println(reflect.TypeOf(s3))

    s4:= &Student{StudentId: "100", StudentName: "200"}
    fmt.Println(s4)
    fmt.Println(reflect.TypeOf(s4))
    
}

輸出結果:

{   }
main.Student
&{   }
*main.Student
&{   }
*main.Student
&{  100 200}
*main.Student
&{100 200  }
*main.Student

 注意:

  除了s0以外,s1-s4變量全部為指向Rect結構的指針(指針變量),因為使用了new()函數和&操作符

  而s0的方法  s0 := Student{} 表示的是一個Student類型,兩者是不一樣的

 

在Go語言中,未進行初始化的變量都會被初始化為該類型的零值,例如bool類型的零值為false, int類型的零值為0, string類型的零值為空字符串. 在Go語言中沒有構造函數的概念,對象的創建通常交由一個全局的創建函數來完成,以NewXXX來命令,表示"構造函數":

func NewStudent()  {    
  return &Student() //返回指針
}

用 new 分配內存 內建函數 new 本質上說跟其他語言中的同名函數功能一樣:new(T) 分配了零值填充的 T 類型的內存空間,並且返回其地址,一個 *T 類型的值。

 

務必記得 make 僅適用於 map,slice 和 channel,並且返回的不是指針。應當用 new獲得特定的指針。

 

 

參考:

  https://studygolang.com/articles/4974


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM