Golang教程
必备事项
-
- golang 1.9のインストール
- VSCode
Golang 的基础。
创建一个目录并创建一个主文件。
mkdir go-tutorial
cd go-tutorial && touch main.go
這次我們將專案的根目錄設置為該目錄,所以需要設定該目錄的路徑。
go mod init example/hello
表达意思
首先,无论使用哪种语言,都可以从编写 Hello World 开始。
对于 Go 语言,即使只想打印输出,也需要先安装 fmt 库。
让我们亲自动手来制作一下。
请使用VSCode打开项目目录,并将以下代码复制粘贴到main.go文件中。
package main
import (
"fmt"
)
func main() {
fmt.Println("Hello, World!")
}
只要调用下面的命令并执行,就能成功。
go run ./
常数和变量
首先从常数开始做起。
定数是指一旦值确定后就无法更改的变量,与变量不同。
在Go语言中,可以这样描述。
const MAX_VALUE = 100
接下来我们尝试使用变量。
var MAX_VALUE = 100
让我们试着改变一下变量吧。
package main
import (
"fmt"
)
func main() {
// 200としてセット
var MAX_VALUE = 200
fmt.Println(MAX_VALUE)
// 300に変更
MAX_VALUE = 300
fmt.Println(MAX_VALUE)
}
数据类型
请使用ChatGPT来查看有关Golang的内容,除了一些特定的部分(如指针和结构体)外,它与其他语言没有太大差别。
package main
import "fmt"
func main() {
var integer int = 2021
var float float64 = 3.14
var boolean bool = true
var str string = "Golang Programming"
fmt.Printf("Integer Value: %d \n", integer)
fmt.Printf("Float Value: %f \n", float)
fmt.Printf("Boolean Value: %t \n", boolean)
fmt.Printf("String Value: %s \n", str)
//Creating an array
var arr [3]int
arr[0] = 1
arr[1] = 2
arr[2] = 3
fmt.Println("Array:", arr)
//Creating a slice
var slic []int = arr[0:2]
slic[0] = 100
//Printing changed array and slice
fmt.Println("After Updating:")
fmt.Println("Array:", arr)
fmt.Println("Slice:", slic)
//Creating a map
var m map[string]int = map[string]int{"one": 1, "two": 2, "three": 3}
fmt.Println("Map:", m)
//Creating a struct
type Student struct {
name string
age int
grade float32
}
var student1 Student = Student{name: "John", age: 20, grade: 3.5}
fmt.Println("Student1:", student1)
//Creating a pointer
var ptr *int = &integer
fmt.Println("Pointer Value:", ptr)
//Creating an interface
type Shape interface {
Area() float64
}
}
函数
尝试编写实际函数
Golang函数的代码如下:
-
- 関数名(functionName)
-
- 引数(parameters)
- returnするときのタイプ(returnType)
写代码时需要指定。
func functionName(parameters) returnType {
// ここに処理を書いてresultに値をいれる
return result
}
匿名函数
对不起,我不知道用日语怎么说,所以直译了一下(笑)。
匿名函数是指没有名字的函数,并在需要时立即调用的函数。
package main
import "fmt"
func main() {
// "Hello, World!"と表示する匿名関数
func() {
fmt.Println("Hello, World!")
}()
// 掛け算を行う匿名関数
result := func(x, y int) int {
return x * y
}(5, 10)
fmt.Println(result)
}
递归
递归是在函数内部的处理中,根据条件不断调用相同的函数直到满足条件为止。
在下面的例子中,我不断地调用,直到n变为0。
func fact(n int) int {
if n == 0 {
return 1
}
return n * fact(n-1)
}
当return有多个值时
func swap(x, y string) (string, string) {
return y, x
}
a, b := swap("hello", "world")
fmt.Println(a, b)
指针的基础
指针是用来存储变量内存地址的变量。
换句话说,指针并不直接存储数据,而是指向计算机内存中存储数据的位置。
什么时候使用?
使用指针的主要目的有两个。
一是当要存储大量数据的变量时使用指针。
如果将大量数据放入变量中,每次使用变量时都会进行数据的复制,因此应根据负载考虑,尽量使用指针来处理大数据或重复使用的数据。
另一个选择是在使用struct等时。
在Golang中,我们可以使用指针来处理结构体和对象。我们将结构体视为一个箱子,可以将各种东西放入其中,并希望修改其中的某些内容。
使用指针时,可以创建一个特殊的变量,它指示内存中的一个准确位置,而不是直接保存值。将这个指针变量传递给函数时,可以对指针变量所指向的struct进行修改,并且这些修改将反映在原始的struct上。
这就像两个人拿着同一个盒子一样,一个人移动盒子里的东西,另一个人也能感知到这个变化。
因此,当想要修改结构体中的内容,而无需复制整个结构体时,指针非常方便。它类似于对原始盒子的快捷方式,可以更快速且高效地进行修改。
指针的使用示例
package main
import "fmt"
type Person struct {
name string
age int
}
func main() {
p := Person{name: "Alice", age: 30}
// 構造体のポインタを作成する
ptr := &p
fmt.Println(ptr) //&{Alice 30}
// 構造体のポインタを使って構造体の値を取得する
fmt.Println((*ptr).name) // prints "Alice"
fmt.Println(ptr.age) // prints 30
// pointerを使ってpの値を変更する
ptr.name = "Bob"
ptr.age = 35
fmt.Println(p) // prints "{Bob 35}"
}