수색…


소개

Go의 함수는 일련의 작업을 수행하기 위해 체계적이고 재사용 가능한 코드를 제공합니다. 함수는 코딩 프로세스를 단순화하고 중복 논리를 방지하며 코드를 쉽게 따르도록합니다. 이 항목에서는 Go의 함수, 인수, 매개 변수, return 문 및 범위의 선언 및 사용에 대해 설명합니다.

통사론

  • func () // 인수가없고 반환 값이없는 함수 유형
  • func (x int) int // 정수를 받아들이고 정수를 반환합니다.
  • func (a, b int, z float32) bool // 정수 2 개를 허용하고 하나는 float로 부울을 반환합니다.
  • func (접두어 문자열, 값 ... int) // 하나의 문자열과 하나 이상의 정수를 허용하는 "가변적"함수
  • func () (int, bool) // 두 값을 반환하는 함수
  • func (a, b int, z float64, opt ... interface {}) (성공 성공 bool) // float와 하나 이상의 float 및 하나 이상의 인터페이스 수를 허용하고 부울 값을 반환합니다 (이미 함수 내부에서 초기화 됨). )

기본 선언

매개 변수를 허용하지 않고 값을 반환하지 않는 간단한 함수입니다.

func SayHello() {
    fmt.Println("Hello!")
}

매개 변수

함수는 선택적으로 매개 변수 집합을 선언 할 수 있습니다.

func SayHelloToMe(firstName, lastName string, age int) {
    fmt.Printf("Hello, %s %s!\n", firstName, lastName)
    fmt.Printf("You are %d", age)
}

firstName 의 유형은 lastName 과 동일하므로 생략되었습니다.

반환 값

함수는 하나 이상의 값을 호출자에게 반환 할 수 있습니다.

func AddAndMultiply(a, b int) (int, int) {
    return a+b, a*b
}

두 번째 반환 값은 var 일 수도 있습니다.

import errors

func Divide(dividend, divisor int) (int, error) {
    if divisor == 0 {
        return 0, errors.New("Division by zero forbidden")
    }
    return dividend / divisor, nil
}

중요한 두 가지 사항을 언급해야합니다.

  • 괄호는 단일 반환 값에 대해 생략 될 수 있습니다.
  • return 문은 선언 된 모든 반환 값에 대한 값을 제공해야합니다.

명명 된 반환 값

반환 값은 로컬 변수에 할당 할 수 있습니다. 그런 다음 빈 return 문을 사용하여 현재 값을 반환 할 수 있습니다. 이것은 "알몸" 반환 으로 알려져 있습니다. Naked return 문은 더 긴 함수에서 가독성을 해치기 때문에 짧은 함수에서만 사용해야합니다.

func Inverse(v float32) (reciprocal float32) {
    if v == 0 {
        return
    }
    reciprocal = 1 / v
    return
}

놀이터에서 놀아 라.

//A function can also return multiple values
func split(sum int) (x, y int) {
    x = sum * 4 / 9
    y = sum - x
    return
}

놀이터에서 놀아 라.

중요한 두 가지 사항을 언급해야합니다.

  • 반환 값 주변의 괄호는 필수 항목 입니다.
  • return 문을 항상 제공해야합니다.

리터럴 함수 및 클로저

간단한 리터럴 함수, 인쇄 Hello! stdout :

package main

import "fmt"

func main() {
    func(){
        fmt.Println("Hello!")
    }()
}

놀이터에서 놀아 라.


str 인자를 stdout에 출력하는 리터럴 함수 :

package main

import "fmt"

func main() {
    func(str string) {
        fmt.Println(str)
    }("Hello!")
}

놀이터에서 놀아 라.


변수 str 닫는 리터럴 함수 :

package main

import "fmt"

func main() {
    str := "Hello!"
    func() {
        fmt.Println(str)
    }()
}

놀이터에서 놀아 라.


리터럴 함수를 변수에 할당 할 수 있습니다.

package main

import (
    "fmt"
)

func main() {
    str := "Hello!"
    anon := func() {
        fmt.Println(str)
    }
    anon()
}

놀이터에서 놀아 라.

가변 인자 함수

variadic 함수는 임의의 개수의 후행 인수로 호출 할 수 있습니다. 이러한 요소는 슬라이스에 저장됩니다.

package main

import "fmt"

func variadic(strs ...string) {
     // strs is a slice of string
     for i, str := range strs {
         fmt.Printf("%d: %s\n", i, str)
     }
}

func main() {
     variadic("Hello", "Goodbye")
     variadic("Str1", "Str2", "Str3")
}

놀이터에서 놀아 라.

또한 variadic 함수에 슬라이스를 줄 수 있습니다. ... :

func main() {
     strs := []string {"Str1", "Str2", "Str3"}

     variadic(strs...)
}

놀이터에서 놀아 라.



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow