職案人

求職・歴史・仏教などについて掲載するつもりだが、自分の思いつきが多いブログだよ。適当に付き合って下さい。

関数の値渡しと、参照渡し

2023年02月24日 | GO言語
関数の値渡しと、参照渡し


【開発環境】
OS:Win11(64ビット)
go version go1.19.4 windows/amd64
VSCode1.72.2、及びコマンドプロンプト

【値渡しと参照渡し】
関数の引数への渡し方には、「値渡し」と「参照渡し」の2種類がある。
「値渡し」→値そのもの渡す
「参照渡し」→値のアドレスを渡す。つまり、ポインターを渡す

1)値渡しの場合
関数内で値が変更されても、呼び出し側には何の影響もない。

2)参照渡しの場合
参照渡し

・サンプルコード
// byref.go
package main

import "fmt"

//byval() - 値渡しの関数
func byval(a int) {
a = a + 1
}

//byRef() - 参照渡しの関数
func byRef(a *int) {
*a = *a + 1
}

func main() {
//値渡しの呼び出し
var n = 1
byval(n)
fmt.Println(" n=", n) //n=1のまま

//参照渡しの呼び出し
n = 1
byRef(&n)
fmt.Println(" n=", n) //n=1のまま

}
・実行
PS D:\GO言語\サンプルプログラム\Go-6\function> go run byref.go
n= 1
n= 2
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

独自関数---任意の型の可変長引数(インターフェイス型)

2023年02月21日 | GO言語
関数のインターフェイス型引数について


【開発環境】
OS:Win11(64ビット)
go version go1.19.4 windows/amd64
VSCode1.72.2、及びコマンドプロンプト

◆インターフェイス型の引数
任意の型の可変長引数を受け取る関数は、引数の型をインターフェイス型にする
例えば
func printmsgs(args...interface{}) {
fmt.println(args...)
}
・サンプルコード
// printmsgs.go
package main

import "fmt"

//printmsgs - 任意の形の可変長引数の例

func printmsgs(args ...interface{}) {
fmt.Println(args...)
}

//Dog - 独自の型の例
type Dog struct {
name string
age int
}

func main() {
printmsgs("わんこだよ。")
printmsgs(88, "わんこだよ。")
printmsgs(-1, "わんこだ。", "ダメだこりゃ")

dog := Dog{"Pochi", 12}

printmsgs(dog, "わんこだよ。")
}

・実行
PS D:\GO言語\サンプルプログラム\Go-6\function> go run printmsgs.go
わんこだよ。
88 わんこだよ。
-1 わんこだ。 ダメだこりゃ
{Pochi 12} わんこだよ。
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

独自関数の作り方

2023年02月20日 | GO言語
独自関数の作り方


【開発環境】
OS:Win11(64ビット)
go version go1.19.4 windows/amd64
VSCode1.72.2、及びコマンドプロンプト

◆関数の定義
関数の定義にはfuncキーワードを使います
・書式
func name([args]) [()returns] {
statement(実行文)
return expr
}
name:関数名
args:関数の引数
returns:戻り値の型

例文
func twice(n int) int {
retun 2*n
}

◆複数の値を返す関数
戻り値の型を複数指定することで、複数の値を返す関数が定義出来る。複数の値を返す関数は返す値のリストを必ず()で囲み、引数は「,」で区切る

例文---面積と、円の円周を返す関数
func circle(r float64)(float64,float64){
area := r*r*3.14
circ := 2*math.Pi*r
return area,circ
}

サンプルコード
/ 円
package main

import (
"fmt"
"math"
)

// 面積と円周を返す関数
func circle(r float64) (float64, float64) {
area := r * r * 3.14
circ := 2 * math.Pi * r
return area, circ
}

func main() {
var r float64
fmt.Printf("半径を入力して下さい:")
fmt.Scan(&r)

var area, circ = circle(r)
fmt.Printf("半径%fの面積は%f\n", r, area)
fmt.Printf("半径%fの円周は%f\n", r, circ)
}


・実行
PS D:\GO言語\サンプルプログラム\Go-6\function> go run test1.go
半径を入力して下さい:3
半径3.000000の面積は28.260000
半径3.000000の円周は18.849556

◆可変長引数
fmt.Println()やfmt.Printf()のように、任意の引数を指定出来る関数がある。このような関数の引数を可変長引数と言う

・サンプルコード
package main

import (
"fmt"
)

func main() {
x := 3
fmt.Printf("%dの2倍は%d\n", x, twice(x))
fmt.Printf("合計は%d\n", sum(1, 3, 5, 7, 9))

max, min := maxmin(1, 3, 5, 7, 9)

fmt.Printf("最大値は%d 最小値は%d\n", max, min)
}

// 引数の2倍の値を返す関数
func twice(n int) int {
return 2 * n
}

// 合計を返す関数
func sum(vals ...int) int {
total := 0
for _, value := range vals {
total += value
}
return total
}

// 最大値と最小値を返す関数
func maxmin(vals ...int) (int, int) {
max := -99999
min := 99999
for _, val := range vals {
if max < val {
max = val
}
if min > val {
min = val
}
}
return max, min
}
・実行
PS D:\GO言語\サンプルプログラム\Go-6\function> go run deffunc.go
3の2倍は6
合計は25
最大値は9 最小値は1
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

strringsパッケージの文字列処理関数

2023年02月15日 | GO言語
文字列処理関数


【開発環境】
OS:Win11(64ビット)
go version go1.19.4 windows/amd64
VSCode1.72.2、及びコマンドプロンプト

【strringsパッケージ】
文字列を処理する基本的な関数をまとめたものが、strringsパッケージだよ。
サンプルコード
package main

import (
"fmt"
"strings"
)

func main() {
var s string

fmt.Printf("文字列を入力して下さい:")
fmt.Scan(&s)

//文字列をカウントする
fmt.Printf("%sの文字列は%d\n", s, strings.Count(s, "")-1)

//文字列を繰り返す
fmt.Printf("%sを2階繰り返すと%s\n", s, strings.Repeat(s, 2))

//すべて大文字に変換する
fmt.Printf("%sの小文字を大文字にすると%s\n", s, strings.ToUpper(s))

//すべて小文字に変換する
fmt.Printf("%sの小文字を大文字にすると%s\n", s, strings.ToLower(s))

}

・実行
PS D:\GO言語\サンプルプログラム\Go-6\function> go run math.go
文字列を入力して下さい:abcDEF漢字かなAb
abcDEF漢字かなAbの文字列は12
abcDEF漢字かなAbを2階繰り返すとabcDEF漢字かなAbabcDEF漢字かなAb
abcDEF漢字かなAbの小文字を大文字にするとABCDEF漢字かなAB
abcDEF漢字かなAbの小文字を大文字にするとabcdef漢字かなab
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

mathパッケージの数学関数

2023年02月14日 | GO言語
主な数学関数


【開発環境】
OS:Win11(64ビット)
go version go1.19.4 windows/amd64
VSCode1.72.2、及びコマンドプロンプト

【関数とは】
関数→何らかの処理を行って必要に応じて結果を返す、名前が付けっれた呼び出し可能な一連のプログラムコードのこと

【数学関数】
Go言語には、あらかじめ用意されている関数がいくつかある。まずは、mathパッケージにある数学関数を学ぶ。主に下記のような関数がある



例文--Abs()の使い方
・サンプルコード1
// Abs()
package main

import (
"fmt"
"math"
)

func main() {
var x float64

fmt.Printf("数を入力して下さい:")
fmt.Scan(&x)

fmt.Printf("%fの絶対値は%f\n", x, math.Abs(x))
}

・実行
PS D:\GO言語\サンプルプログラム\Go-6\function> go run math.go
数を入力して下さい:5
5.000000の絶対値は5.000000

・サンプルコード2--いくつかの関数を使う
package main

import (
"fmt"
"math"
)

func main() {

var x float64

fmt.Printf("数を入力して下さい:")
fmt.Scan(&x)


//切り上げた結果を返す
fmt.Printf("%.2fを切り上げた値は%.2f\n", x, math.Ceil(x))

//切り捨てた結果を返す
fmt.Printf("%.2fを切り捨てた値は%.2f\n", x, math.Floor(x))

//四捨五入した結果を返す
fmt.Printf("%.2fを四捨五入した%.2f\n", x, math.Round(x))

//e(2.71828182845904)を底とするべき乗を返す
fmt.Printf("%.2fの立方根は%.2f\n", x, math.Exp(x))

//平方根を返す
fmt.Printf("%.2fの平方根は%.2f\n", x, math.Sqrt(x))

//立方根を求める
fmt.Printf("%.2fの立方根は%.2f\n", x, math.Cbrt(x))
}
・実行
PS D:\GO言語\サンプルプログラム\Go-6\function> go run math.go
数を入力して下さい:2.35
2.35を切り上げた値は3.00
2.35を切り捨てた値は2.00
2.35を四捨五入した2.00
2.35の立方根は10.49
2.35の平方根は1.53
2.35の立方根は1.33

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする