Go 언어 기본 사항 - 내장 함수

Go 언어 기본 사항

내장형

값 유형:

   bool
    int(32 or 64), int8, int16, int32, int64
    uint(32 or 64), uint8(byte), uint16, uint32, uint64
    float32, float64
    string
    complex64, complex128
    array    -- 固定长度的数组

참조 유형: (포인터 유형)

  slice   -- 序列数组(最常用)
    map     -- 映射
    chan    -- 管道

내장 함수

  • make(): 새 슬라이스, 맵 또는 채널을 만드는 데 사용됩니다. make() 함수의 매개변수에는 작성할 유형, 길이 및 용량이 포함됩니다.
    // 创建一个长度为5,容量为10的slice
    s := make([]int, 5, 10)
    fmt.Println(len(s)) // 5
    fmt.Println(cap(s)) // 10
    
    // 创建一个长度为5,容量为5的map
    m := make(map[string]int, 5)
    m["one"] = 1
    fmt.Println(m) // map[one:1]
    
    // 创建一个容量为10的channel
    c := make(chan int, 10)
    c <- 1
    fmt.Println(<-c) // 1
    
  • append(): 슬라이스에 요소를 추가하는 데 사용됩니다. 슬라이스의 용량이 부족하면 append() 함수가 자동으로 용량을 확장합니다.
    // 向slice中添加元素
    s := []int{
          
          1, 2, 3}
    s = append(s, 4, 5, 6)
    fmt.Println(s) // [1 2 3 4 5 6]
    
  • len(): 슬라이스, 맵, 문자열, 배열 및 채널의 길이를 가져오는 데 사용됩니다.
    s := []int{
          
          1, 2, 3, 4, 5}
    fmt.Println(len(s)) // 5
    
    m := map[string]int{
          
          "one": 1, "two": 2, "three": 3}
    fmt.Println(len(m)) // 3
    
    str := "hello"
    fmt.Println(len(str)) // 5
    
    arr := [5]int{
          
          1, 2, 3, 4, 5}
    fmt.Println(len(arr)) // 5
    
    c := make(chan int, 10)
    c <- 1
    fmt.Println(len(c)) // 1
    
  • cap(): 슬라이스, 어레이 및 채널의 용량을 얻기 위해 사용됩니다.
    s := []int{
          
          1, 2, 3, 4, 5}
    fmt.Println(cap(s)) // 5
    
    arr := [5]int{
          
          1, 2, 3, 4, 5}
    fmt.Println(cap(arr)) // 5
    
    c := make(chan int, 10)
    fmt.Println(cap(c)) // 10
    
  • copy(): 슬라이스의 요소를 다른 슬라이스로 복사하는 데 사용됩니다.
    
    s1 := []int{
          
          1, 2, 3, 4, 5}
    s2 := make([]int, len(s1))
    copy(s2, s1)
    fmt.Println(s2) // [1 2 3 4 5]
    
  • close(): 채널을 닫는 데 사용됩니다.
    c := make(chan int, 10)
    c <- 1
    close(c)
    fmt.Println(<-c) // 1
    _, ok := <-c
    fmt.Println(ok) // false
    
  • delete(): 지도에서 요소를 삭제하는 데 사용됩니다.
    m := map[string]int{
          
          "one": 1, "two": 2, "three": 3}
    delete(m, "two")
    fmt.Println(m) // map[one:1 three:3]
    
  • panic() 및 recover(): Go 언어에서 예외를 처리하는 데 사용됩니다.
    func test() {
          
          
        defer func() {
          
          
            if err := recover(); err != nil {
          
          
                fmt.Println("panic:", err)
            }
        }()
        panic("test panic")
    }
    
    func main() {
          
          
        test()
        fmt.Println("after test")
    }
    // 输出:panic: test panic
    
    이는 test()함수에서 함수가 호출되어 panic()프로그램에서 예외가 발생하고, defer그 예외를 문장 내 익명함수를 통해 잡아서 처리하기 때문이다. 특히 defer이 명령문은 익명 함수를 함수 호출 스택으로 푸시하고 익명 함수를 실행하기 전에 현재 함수가 실행될 때까지 기다립니다. 이 예제에서는 익명 함수에서 함수를 사용하여 recover()예외를 포착하고 예외 정보를 콘솔에 출력합니다. recover()함수는 문 안에서만 효과를 발휘할 수 있기 때문에 문 안에 defer넣어야 합니다 . defer마지막으로 main()함수는 계속 실행되고 출력됩니다 after test.
  • print() 및 println(): 터미널에 내용을 출력하는 데 사용됩니다.
    name := "Alice"
    age := 20
    fmt.Print("My name is ", name, ", and I'm ", age, " years old.")
    // 输出:My name is Alice, and I'm 20 years old.
    
    fmt.Println("My name is ", name, ", and I'm ", age, " years old.")
    // 输出:
    // My name is Alice, and I'm 20 years old.
    // (自动换行)
    

내장 인터페이스 오류

  type error interface {
    
     //只要实现了Error()函数,返回值为String的都实现了err接口

            Error()    String

    }

보시다시피 error인터페이스에는 Error()문자열 유형의 오류 메시지를 반환하는 메서드가 하나만 포함되어 있습니다. 따라서 오류 유형을 사용자 지정하려면 Error()메서드만 구현하면 됩니다.

다음은 0으로 나누기 오류를 나타내는 사용자 지정 오류 유형의 예입니다.

type DivideError struct {
    
    
    dividend int
    divisor  int
}

func (de *DivideError) Error() string {
    
    
    return fmt.Sprintf("error: divide %d by %d", de.dividend, de.divisor)
}

func divide(dividend, divisor int) (int, error) {
    
    
    if divisor == 0 {
    
    
        return 0, &DivideError{
    
    dividend, divisor}
    }
    return dividend / divisor, nil
}

func main() {
    
    
    result, err := divide(10, 0)
    if err != nil {
    
    
        fmt.Println(err)
    } else {
    
    
        fmt.Println(result)
    }
}

DivideError이 예에서는 피제수와 제수라는 두 개의 변수를 포함하는 구조를 정의합니다 . Error()그런 다음, 약수가 0일 때 오류 메시지를 반환하는 이 구조에 대한 메서드를 정의합니다 . 다음으로 divide()두 숫자의 몫을 계산하고 계산 결과와 오류 메시지를 반환하는 함수를 정의합니다. DivideError제수가 0이면 오류 유형을 반환합니다 . 마지막으로 함수에서 함수를 main()호출하여 반환된 오류가 비어 있지 않으면 오류 메시지를 출력하고 그렇지 않으면 계산 결과를 출력합니다.divide()

요컨대, error인터페이스는 오류 정보를 표현하는 데 사용되는 Go 언어에서 매우 일반적으로 사용되는 인터페이스입니다. 실제 개발에서는 종종 error인터페이스를 사용하여 오류 유형을 정의하고 호출자에게 오류 정보를 반환합니다. 합리적으로 인터페이스를 사용하여 error프로그램의 내결함성과 견고성을 향상시킬 수 있습니다.

추천

출처blog.csdn.net/m0_60496161/article/details/130836218