>  기사  >  백엔드 개발  >  Go 언어의 구조와 방법에 대한 자세한 설명

Go 언어의 구조와 방법에 대한 자세한 설명

尚
앞으로
2020-06-19 17:44:193563검색

Go 언어의 구조와 방법에 대한 자세한 설명

구조체는 복잡한 데이터 구조를 정의하고 많은 동일한 필드 속성을 저장하는 데 사용됩니다

1. 구조 정의 및 간단하고 실용적입니다.

package main

import (
    "fmt"
)

func main() {
    type Student struct { //定义结构体
        name string
        age  int
    }
    s1 := new(Student) // 定义指向结构体的指针
    s1.name = "xiaomu"
    s1.age = 10
    fmt.Printf("name:%s\nage:%d\n", s1.name, s1.age)
}

위와 같은 구조를 정의하는 세 가지 학생 유형은 다음과 같습니다.

1var s1 Student를 정의하는 방법은 메모리에 구조체 변수를 직접 정의하는 방법입니다.

②s1 := new(Student)를 사용하여 메모리에 구조체에 대한 포인터를 정의합니다.

3s1 := &Student{} 위와 동일합니다.

다음 메소드를 통해 저장된 값을 가져옵니다

①s1.name

②s1.name 또는 (*s1).name

③ 위와 동일

2. 팩토리 패턴은 코드를 참고하세요

package main

import (
    "fmt"
)

type Student struct { //声明结构体
    Name string
    Age  int
}

func NewStudent(name string, age int) *Student { // 返回值指向Student结构体的指针
    return &Student{
        Name: name,
        Age:  age,
    }
}

func main() {
    s1 := NewStudent("xiaomu", 123) // 声明并且赋值指向Student结构体的指针
    fmt.Printf("name: %s\nage: %d", s1.Name, s1.Age)
}

3. 주의사항 특별문의! ! !

구조체는 값 유형이므로 메모리를 할당하려면 new를 사용해야 합니다

4. 익명 필드는 아래 코드를 직접 살펴보세요

package main

import (
    "fmt"
)

func main() {
    type Class struct {
        ClassName string
    }
    type Student struct { //定义结构体
        name  string
        age   int
        Class // 定义匿名字段,继承了该结构体的所有字段
    }
    s1 := new(Student) // 定义指向结构体的指针
    s1.ClassName = "xiaomu"
    fmt.Printf("ClassName:%s\n", s1.ClassName)
}

struct method

1. struct에 메소드를 정의하고

package main

import (
    "fmt"
)

type Student struct { //定义结构体
    name string
    age  int
}

func (stu *Student) OutName() { // 定义Student方法
    fmt.Println(stu.name)
}

func main() {
    s1 := new(Student) // 定义指向结构体的指针
    s1.name = "xaiomu"
    s1.OutName()
}

2 .구조 상속된 구조, 상속된 구조의 모든 메소드는 상속된 구조에 흡수됩니다

package main

import (
    "fmt"
)

type ClassName struct {
    className string
}

func (cla *ClassName) OutClassName() {
    fmt.Println(cla.className)
}

type Student struct { //定义结构体
    name      string
    age       int
    ClassName // 继承ClassName结构体的所有
}

func (stu *Student) OutName() { // 定义Student方法
    fmt.Println(stu.name)
}

func main() {
    s1 := new(Student) // 定义指向结构体的指针
    s1.className = "xiaomu"
    s1.OutClassName()
}

더 많은 관련 지식은 go 언어 튜토리얼칼럼

을 참고하세요.

위 내용은 Go 언어의 구조와 방법에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 cnblogs.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제