앞서 Go 언어의 맵은 이와 같이 키-값 쌍의 형태로 데이터를 저장한다고 말씀드렸습니다. 기억나지 않는 분들을 위해 다음을 클릭하세요: Go 언어 맵의 기본과 Go 언어의 기본 맵 보충 내용을 이해하는 데 도움이 되는 기사입니다.
//方式一 var student = map[string]string{ "Name": "张三", "Age": "18", } //方式二 var student2 = make(map[string]string, 10) student2["Name"] = "张三" student2["Age"] = "18"
하지만 이게 단점이 있는 것 같아요. key 개수가 몇 개인지 모르겠고, value 유형이 고정되어 있습니다.
이론적으로 해당 값은 Age
int 유형이어야 하며 기타 미묘한 문제는 지도에서 쉽지 않습니다. 해결하기 위해. 이러한 문제를 해결하기 위해 구조 유형이 도입되었습니다.
보충 전희
代码
type 自定义类型名 类型名 例: type NewInt int
完整代码
package main import "fmt" type NewInt int func main() { var n1 NewInt = 1 fmt.Println(n1)//结果为1 }
如果要是理解的话,可以理解为NewInt
包含了int
的功能。
这里可以把NewInt
当作int
来使用。
注:NewInt
是一个新的类型,它包含int
,并不等于int
。
代码
type 类型别名 = 类型名 例: type Nint = int
完整代码
package main import "fmt" type Nint = int func main() { var n1 Nint = 1 fmt.Println(n1)//1 }
可能猛一看,感觉自定义类型和类型别名似乎一样,但是其实是不太一样的。
代码
package main import "fmt" type Nint1 int //自定义类型 type Nint2 = int //类型别名 func main() { var n1 Nint1 = 1 var n2 Nint2 = 1 fmt.Printf("n1类型:%T,n2类型:%T", n1, n2) }
执行结果。
결론: 사용자 정의 유형은 유형이 변경되었을 뿐이지만 본질은 동일합니다. ㅋㅋㅋ 테두리 스타일: 단색; 테두리 색상: rgb(231, 234, 237); 배경 색상: rgb(243, 244, 244); 테두리 반경: 3px; 오른쪽 패딩: 2px; 왼쪽 패딩: 2px; 글꼴 크기: 0.9em;">Java
,
Python
Python과 같은 언어의 클래스는 더 이상 단순한 구조만큼 단순하지 않습니다.
에 속합니다 기본 데이터 유형Java
,Python
等语言中的类,已经不再是简简单单的结构体那么简单了。
结构体属于基本数据类型。
内存图大概如下。
定义结构体需要用到关键字type
和struct
.
🎜🎜메모리 맵은 대략 다음과 같습니다🎜 🎜🎜. 🎜🎜
🎜🎜🎜
🎜구조를 정의하려면 키워드를 사용해야 합니다🎜🎜유형
🎜🎜and🎜🎜구조체
🎜🎜. 🎜🎜
语法
type 结构体名 struct { 字段1 字段类型1 字段2 字段类型2 ... }
示例,通过结构体描述一个学生。
type Student struct { Name string Age int Height int Weight int phone string }
注:如果字段类型是相同的,可以写在同一行。
type Student struct { Name string Age, Height, Weight int phone string }
func main() { var s1 = Student{ Name: "张三", Age: 18, Height: 180, Weight: 120, phone: "6666666", } fmt.Println(s1) }
func main() { var s1 Student s1.Name = "张三" s1.Age = 18 s1.Height = 180 s1.Weight = 120 s1.phone = "66666" }
两个执行结果。
有时候我们的函数可能会要求传入一个结构体,但是你又不想定义,就想临时用一下,赶紧传参得了。
这时候可以考虑匿名结构体。
func main() { var car struct { Name string; CarNum string } car.Name = "QQ" car.CarNum = "京6666" fmt.Println(car) //{QQ 京6666} }
func main() { var car = struct { Name string; CarNum string }{ Name: "QQ", CarNum: "京6666", } fmt.Println(car) //{QQ 京6666} }
两个执行结果。
&
方式初始化结构体通过&
的方式初始化,性能会提高一点,因为返回的是第一个的指针。
但是操作过程跟上述一样,Go已经封装好了。
代码
func main() { //方式一,等于一个空&结构体在赋值 var s1 = &Student{} s1.Name = "张三" //... //方式二,直接赋值 var s2 = &Student{ Name: "", Age: 0, Height: 0, Weight: 0, phone: "", } //方式三不可以 //var s3 &Student//error }
使用&
的方式基本跟原来一样,但是方式三不行。
如果使用&
的方式,那函数参数也要变一下的。
package main import "fmt" type Student struct { Name string Age, Height, Weight int phone string } func sayStudent1(s Student) { fmt.Println(s) } func sayStudent2(s *Student) { //如果穿的是结构体地址,那么接收就需要用* fmt.Println(s) } func main() { var s1 = Student{ Name: "111", Age: 0, Height: 0, Weight: 0, phone: "1111", } var s2 = &Student{ Name: "2222", Age: 0, Height: 0, Weight: 0, phone: "2222", } sayStudent1(s1) sayStudent2(s2) }
执行结果。
代码
func main() { var s1 = Student{} fmt.Println(s1) }
执行结果。
在操作结构体时,即使没有赋值,也会有默认值,所以不用担心会报错。
int
默认值是0,string
默认值是"",等。
위 내용은 Go语言基础之结构体(春日篇)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!