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()
}