関数とは何ですか?
#関数は、特定のタスクを実行するコードのブロックです。関数は入力を受け取り、その入力に対していくつかの計算を実行し、出力を生成します。
Go 言語の関数宣言の構文は次のとおりです。
func functionname(parametername type) returntype { //function body }
関数宣言は func で始まります。キーワードの後に関数名が続きます。パラメーターは角括弧 () 内に指定され、その後に関数の戻り値の型が続きます。パラメータを指定する構文は、パラメータ名の後にパラメータ タイプを指定します。次のように、任意の数のパラメータを指定できます:
(parameter1 type, parameter2 type)
関数の主要部分は中括弧内に配置されます。
パラメータと戻り値はオプションであるため、次の宣言も有効な関数宣言です:
func functionname() { }
関数を書いてみましょう。関数の引数は商品の単価と商品の数量で、商品の合計金額を計算して返します。
func calculateBill(price int, no int) int { var totalPrice = price * no return totalPrice }
上記の関数の入力パラメータは、price と no で、どちらも int 型です。この 2 つの積が totalPrice に割り当てられ、戻り値として返されます。totalPrice も int 型です。
連続するパラメータが同じ型の場合、各パラメータの型を指定する必要がなく、最後のパラメータの型を指定するだけで済みます。 (price int、no int など) int ではなく、price として記述することができるため、上記の関数は次のように変更できます。
func calculateBill(price, no int) int { var totalPrice = price * no return totalPrice }
関数を記述したので、この関数を呼び出してみます。関数を呼び出すための構文は functionname(parameters) です。上記の関数は次のように呼び出すことができます:
calculateBill(10, 5)
次は完成したプログラムです:
package main import ( "fmt" ) func calculateBill(price, no int) int { var totalPrice = price * no return totalPrice } func main() { price, no := 90, 6 totalPrice := calculateBill(price, no) fmt.Println("Total price is", totalPrice) }
Execution [1]
上記のコード出力:
Total price is 540
Go 语言是允许函数返回多个值的。我们来写一个 rectProps() 函数,该函数的参数是长方形的 length 和 width,返回长方形的 area(面积) 和 perimeter(周长)。
package main import ( "fmt" ) func rectProps(length, width float64)(float64, float64) { var area = length * width var perimeter = (length + width) * 2 return area, perimeter } func main() { area, perimeter := rectProps(10.8, 5.6) fmt.Printf("Area %f Perimeter %f", area, perimeter) }
执行[2]
如果一个函数返回多个值则需要使用 () 指定,比如:
func rectProps(length, width float64)(float64, float64)
该函数有两个 float64 参数 length 和 width,也返回两个 float64 类型的值。
上面的代码输出:
Area 60.480000 Perimeter 32.800000
可以从函数返回命名值。如果返回值被命名,则可以认为它在函数的第一行被声明为变量,并初始化为相应类型的零值。
上面的 rectProps() 函数可以使用命名的返回值重写:
func rectProps(length, width float64)(area, perimeter float64) { area = length * width perimeter = (length + width) * 2 return //no explicit return value }
area 和 perimeter 是函数中命名的返回值。
需要注意的是,函数里的 return 语句没有返回任何值。由于在函数声明中将 area 和 perimeter 指定为返回值,因此当遇到 return 语句时,它们会自动从函数中返回。
Go 语言里面,下划线 _ 可以被当做空白符使用。它可以用来代替任何类型的任何值,让我们看看这个空白标识符有什么用。
rectProps() 函数返回长方形的面积和周长。如果我们只想要面积,而不想要周长那该怎么办呢?这时候空百符 _ 就可以派上用场了。
package main import ( "fmt" ) func rectProps(length, width float64) (float64, float64) { var area = length * width var perimeter = (length + width) * 2 return area, perimeter } func main() { area, _ := rectProps(10.8, 5.6) // perimeter is discarded fmt.Printf("Area %f ", area) }
执行[3]
上面代码的第 13 行,我们接收了函数返回的 area,并使用 _ 忽略了 perimeter。
以上がGo言語の基本機能の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。