Go 语言入门| 豆包MarsCode AI 刷题

123 阅读4分钟

特点

  1. 高性能、高并发
  2. 语法简单、学习曲线平缓
  3. 丰富的标准库
  4. 完善的工具链
  5. 静态链接
  6. 快速编译
  7. 跨平台
  8. 垃圾回收

基本类型

类型描述
uint8 / uint16 / uint32 / uint64无符号 8 / 16 / 32 / 64位整型
int8 / int16 / int32 / int64有符号8 / 16 / 32 / 64位整型
float32 / float64IEEE-754 32 / 64 位浮点型数
complex64 / complex12832 / 64 位实数和虚数
byte类似 uint8
rune类似 int32
uintptr无符号整型,用于存放一个指针

声明

变量名: 由字母、数字、下划线组成,其中首字母不能是数字

语句/表达式: 不需要加;

如果变量没有初始化 数值类型默认0 布尔类型默认false 字符串默认""

package main //指明此文件属于哪个包

import "fmt" //引人包

func main() { //函数

	var x int = 27 //声明了一个int类型的变量
	fmt.Println(x) //输出

	var name = "小明"   //如果没有指定类型,可以通过变量的初始值判断类型
	fmt.Println(name) //输出

	y := 27 //相当于 var y int = 27
	fmt.Println(y)

	//匿名变量: 就是一个下划线 _ 被称为空白标识符,它可以像其他标识符那样用于变量的声明或赋值(任何类型都可以赋值给它),但任何赋给这个标识符的值都将被抛弃
	a, _ := example()
	_, b := example()
	fmt.Println(a, b)
}

func example() (int, int) {
	return 10, 20
}

循环语句

在go中只有for这一种循环语句

循环控制语句有:break,continue,goto

package main

import "fmt"

func main() {
	//只有for循环
	for j := 1; j < 9; j++ {
		fmt.Println(j)
	}
	//循环控制语句
	//break: 跳出循环
	//continue: 跳过当前循环执行下一次循环语句
	//goto: 无条件转移到过程中指定的行,如下
	var a int = 0
LOOP:
	for a < 5 {
		if a == 2 {
			a = a + 1
			goto LOOP
		}
		fmt.Printf("%d\n", a)
		a++
	}
}

条件语句

if if-else switch select

package main

import "fmt"

func main() {
	//if
	if 7%2 == 0 {
		fmt.Println("123")
	}
	//if-else
	if 7%2 == 0 {
		fmt.Println("123")
	} else {
		fmt.Println("456")
	}
	a := 2
	//switch
	switch a {
	case 1:
		fmt.Println("one")
	case 2:
		fmt.Println("two")
	case 3:
		fmt.Println("three")
	default:
		fmt.Println("else")
	}
	//select
}

指针

package main

import "fmt"

func main() {
	var a *int      //声明指针变量
	var b int = 20  //声明实际变量
	a = &b          //指针变量的存储地址
	fmt.Println(a)  //输出地址
	fmt.Println(*a) //输出值
	//空指针: 当一个指针被定义后没有分配到任何变量时,它的值为 nil
}

数组

package main

import "fmt"

func main() {
    //定义一个一维数组
    //var nums [5]float32
    //定义并初始化一个一维数组
    var nums1 = [5]float32{1.0, 2.5, 3.3, 4.6, 9.9} //方式一
    //nums2 := [5]float32{1.0, 2.5, 3.3, 4.6, 9.9}      //方式二
    //var nums3 = [...]float32{1.0, 2.5, 3.3, 4.6, 9.9} //方式三
    //nums4 := [...]float32{1.0, 2.5, 3.3, 4.6, 9.9}    //方式四
    //nums5 := [5]float32{1.0, 2.5}                     //方式五 部分初始化

    //获取数组长度
    var length = len(nums1)
    fmt.Println(length)

    //定义数组指针
    var a = &nums1
    //通过数组指针迭代数组的元素
    for i, v := range a {
        fmt.Println(i, v)
    }
}

结构体

package main

// Books 定义一个结构体类型
type Books struct {
	title string
	auth  string
}

func main() {
	var book Books
	book.title = "Go 语言入门"
	book.auth = "xiaoming"
}

函数

package main

import "fmt"

func main() {
	fmt.Println(example2(2, 1))
}

/*
example2 函数名称
(a int, b int) 参数列表
(int, int) 返回值类型
return a + b, a - b 函数体
*/
func example2(a int, b int) (int, int) {
	return a + b, a - b
}

关键字

关键字作用
import导入相应的包文件
package创建包文件,用于标记该文件归属哪个包
chanchannal,通道
var变量控制,用于简短声明定义变量(:=符号只能在函数内部使用,不能全局使用)
const常量声明,任何时候const和var都可以同时出现
func定义函数和方法
interface接口,是一种具有一组方法的类型,这些方法定义了interface的行为
map哈希表
struct定义结构体
type声明类型,取别名
forfor是go中唯一的循环结构
break中止,跳出循环
continue继续下一轮循环
select选择流程,可以同时等待多个通道操作
switch多分枝选择,上文中已经详细介绍过它的用法
case和switch配套使用
default用于选择结构的默认选型
defer用于资源释放,会在函数返回之前进行调用
if分支选择
else和if配套使用
go通过go func()来开启一个goroutine
goto跳转至标志点的代码块,不推荐使用
range用于遍历slice类型数据
return用于标注函数返回值

总结、感悟

与java相比的不同之处在于:

if后面的判断条件不需要加()

for循环条件不需要加()

switch不需要加break