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}"
}

广告
将在 10 秒后关闭
bannerAds