Go语言学习笔记 | 豆包MarsCode AI刷题

92 阅读3分钟

本篇旨在自己在学习Go时的理解,不保证百分百正确,如发现错误,欢迎指正

变量

变量赋值

不同于其他强类型语言,Go的赋值语句有两种写法

  1. 直接赋值 var a = 1
  2. 短变量声明赋值 a := 1 需要注意的是,:=只能在函数内部使用

常量

常量使用 const 关键字声明,常量的值在编译时确定,不能被修改。

const Pi = 3.14

数据类型

Go语言支持多种基本数据类型,包括:

  • 整数:int, int8, int16, int32, int64
  • 浮点数:float32, float64
  • 布尔值:bool
  • 字符串:string

控制结构

循环

不同于其他的编程语言,Go的循环结构只有for循环,死循环也可以利用for循环完成

// 若没有 break 则为死循环
for {
    // code
    break
}

// 普通循环
var i = 0
for i <= 10 {
    // code
    i++
}

for j := 0;j < 100;j++ {
    // code
}

判断

if 语句同样不需要括号,非常简洁,同时可以在判断条件处赋值

if num := 100, a <= 100 {
    // ...
}else if {
    // ...
}else {
    // ...
}

函数

Go的函数声明使用关键字 func ,并且支持多返回值,一般第一个返回值为正常返回,第二个返回错误类型

import(
    "errors"
)
func test() (string, error){
    return "",errors.New()
}
reslut, errorType := test()

结构体

可以类比Java的,结构体(struct)是一种用户自定义的数据类型,用于将多个不同类型的数据组合成一个有机的整体,下面是结构体的一些示例

type user struct {
    name     string
    password string
}

上述代码表示定义了一个名为 user的结构体,有两个 string 类型的字段,分别为 namepassword 结构体有多种初始化方式

  • a := user{name: "wang", password: "1024"}
  • b := user{"wang", "1024"}
  •   c := user{name: "wang"}
      c.password = "1024"
    
  •   var d user
      d.name = "wang"
      d.password = "1024"
    

访问结构体成员 结构体名.成员名

指针

不同于C的指针,Go的指针有很多限制,一般用于在函数内直接修改值

func modifyValue(p *int) {
    *p = 30
}

切片

go中的切片是对数组的抽象

创建切片

// 方式1
var slice []int = {1,2,3}
// 方式2
slice := make([]int,len,<capcity>) // len 为数组的初始长度,capcaity 是容量大小,可选参数。

接口

Go 语言中的接口是隐式实现的,也就是说,如果一个类型实现了一个接口定义的所有方法,那么它就自动地实现了该接口。因此,我们可以通过将接口作为参数来实现对不同类型的调用,从而实现多态。

package main

type iPhone interface{
	Call()
}

type Lin struct{}

func (l *Lin)Call(){
	println("lin")
}

func main(){
	iPhone := new(Lin)
	iPhone.Call()
}

上面的例子中,定义了一个接口iPhone,里面有一个抽象方法Call(),又定义了一个结构体Lin,然后定义了一个方法Call(),并指定方法的接受者(l *Lin),所以在下面调用Call()方法时会输出lin

总结

Go的许多语法不同于其它的我所学过的编程语言,但又有相似的地方,初看可能会感觉很乱、很杂,但在实际上手写过几次后就会发现Go的简洁和高效。这种语言的设计哲学强调了代码的可读性和简洁性,以及并发编程的易用性,这些都是Go语言在现代软件开发中越来越受欢迎的原因。

以上笔记只是两天来的入门,可能部分理解有误,如有错误,烦请指正!