Go语言入门小记1 | 青训营

75 阅读2分钟

Getting Start

现在我手上最熟悉的语言是JavaScript (TypeScript)和Python,Go的语法结构等等我认为应该是偏C系列的语言,但是做出了很多简化。这篇文章也应该会基于我之前的编程语言做出一些比较,记录一下我很容易混淆的部分。

BTW,大家一定记得添加GOPROXY。


变量和流程控制

声明变量得用var, 不能啥都不写(python坏习惯), 得声明它的类型

var intVariable int
var stringVariable string
var name string = "Alice"
var age = 26 // Inferred as int

Go中有一个 := 来声明变量, 这个符号只能声明+赋值, 不能重新赋值, 不能在Package level使用, 也就是说只能在func中或者其他代码块中使用.
使用这种缩写形式的时候变量类型会自动推断.
流程控制中 if/for/switch的条件不需要加括号 (Anyway, 加了也会给你删掉), 而执行的代码块用大括号包裹~~(习惯性打冒号回车缩进)~~

数组, 切片

在Go中创建切片需要使用make关键字

package main

import "fmt"

func main() {
    mySlice := []int{1, 2, 3, 4, 5, 6, 7, 8}
    slicedSlice := mySlice[2:5]  // Returns [3, 4, 5]
    fmt.Println(slicedSlice)
}

与Python非常不同的是,Python的切片是产生一个新的数组,而Go中的切片实质上是指向了原数组的,所以更改切片中的元素影响到原数组.
Go中的切片位置不像Python一样支持负数
和Python类似, Go的切片也有append方法来添加元素. Go slice用delete来删除某一位置上的元素

函数定义

JS和Python相比Go来说都算"很随便"的语言, 函数的定义可以非常松散.
Go 的函数定义需要使用func关键字, 下面的代码包含了各类函数定义方式

// Function with parameters and return value
func add(x int, y int) int {
	return x + y
}

// Function with multiple return values
func divideAndRemainder(a int, b int) (int, int) {
	return a / b, a % b
}

// Function with variadic parameters
func sum(numbers ...int) int {
	total := 0
	for _, num := range numbers {
		total += num
	}
	return total
}

// Function with a named return value
func multiply(x, y int) (product int) {
	product = x * y
	return // No need to explicitly mention the return variable since it's named
}

// Function with pointer parameters
func incrementByPointer(a *int) {
	*a = *a + 1
}

// Function with a function as a parameter
func applyOperation(num int, operation func(int) int) int {
	return operation(num)
}

// Anonymous function (function literal), quite similar to JavaScript
var myFunction = func() {
	fmt.Println("This is an anonymous function.")
}

func main() {
	// Function invoke
	result := add(3, 5)
	fmt.Println("3 + 5 =", result)

	quotient, remainder := divideAndRemainder(10, 3)
	fmt.Println("10 / 3 =", quotient)
	fmt.Println("10 % 3 =", remainder)

	total := sum(1, 2, 3, 4, 5)
	fmt.Println("Sum of 1 to 5 =", total)

	product := multiply(4, 6)
	fmt.Println("4 * 6 =", product)

	value := 5
	incrementByPointer(&value)
	fmt.Println("Incremented value:", value)

	result = applyOperation(10, func(num int) int {
		return num * 2
	})
	fmt.Println("10 * 2 =", result)

	myFunction()
}