go语言学习文档精简版

Go语言是一门开源的编程语言,目的在于降低构建简单、可靠、高效软件的门槛。Go平衡了底层系统语言的能力,以及在现代语言中所见到的高级特性。

你好,Go

Go 复制代码
package main // 程序组织成包

import "fmt" // fmt包用于格式化输出数据

// 主函数入口
func main() {
    // 输出语句
    fmt.Printf("hello world")
}

如果你没有本地的Go语言环境,可以通过浏览器在线方式学习: https://go.dev/play/

一、数据类型

1.1 变量

Go语言是一种静态类型的编程语言。

可以通过 var 声明一个或多个变量

Go 复制代码
var str = "apple"

也可以通过 := 语法来进行初始化变量的简写

Go 复制代码
str := "apple"

以上两种创建方式应用代码如下:

Go 复制代码
package main

import "fmt"

func main() {
	var a = "saycode" // 字符串
	fmt.Println(a)

	var b, c int = 1, 2 // 整型
	fmt.Println(b, c)

	var d = true 	// 布尔型
	fmt.Println(d)

	var e int		// 声明变量类型为 int
	fmt.Println(e)

    // 简化方式
	f := "apple" // 字符串
	fmt.Println(f)

	g := true	// 布尔型
	fmt.Println(g)
}

可以在同一行内创建多个变量

多行创建

Go 复制代码
name := "saycode"
age := 10

同行创建

Go 复制代码
package main

import "fmt"

func main() {
    name, age := "saycode", 10
    fmt.Println(name, age)
}

1.2 常量

常量是可不变的值,Go语言支持字符、字符串、布尔值和数字值的常量。

使用 const 关键字声明

错误案例

运行当前程序发现报错cannot assign to name (untyped string constant "I Like Go"),也就证实了,常量进行初始化值后,是不可以进行改变的。

Go 复制代码
package main

import "fmt"

func main() {
    const name := "I Like Go"
    name = "I Like Java"

    fmt.Println(name)
}

正确案例

将π作为常量进行声明,接着去计算出圆的面积。

Go 复制代码
package main

import "fmt"

const PI = 3.14

func main() {
	// 计算圆的面积
	const r = 2
	const area = PI * r * r

	fmt.Println(area)
}

二、格式化输出

2.1 默认方式

如果不确定要用什么,可以直接使用%v (最好使用特定)

Go 复制代码
fmt.Printf("我今年 %v 岁", 20)
// 我今年 20 岁
fmt.Printf("我叫 %v", "张三")
// 我叫 张三

2.2 字符串

当需要特定插入字符串时,可使用 %s

Go 复制代码
fmt.Printf("我叫 %s", "张三")

2.3 十进制整数

当需要特定插入十进制整数时,可使用%d

Go 复制代码
fmt.Printf("我今年 %d 岁", 10)
// 我今年 10岁

2.4 浮点数

当需要插入浮点数时,可使用 %f

.数字f (.2f),含义就是保留小数点后两位

Go 复制代码
fmt.Printf("我今年 %f 岁", 10.22)
// 我今年 10.220000岁
fmt.Printf("我今年 %.2f 岁", 10.22)
// 我今年 10.22岁

2.5 变量类型

当需要查看当前变量类型时,可使用%T

Go 复制代码
package main

import "fmt"

func main() {
    
	num := 10
	fmt.Printf("num类型为 %T", num)
}

三、选择结构

3.1 条件判断

if语句是一种用于判断条件的结构,他将根据布尔表达式,结果就是 (true 或 false)的结果来决定是否执行某段代码。

else 是不满足前一个 if 后去执行的代码块。

如下代码就是判断 x > 5(布尔表达式), 如果大于则执行"x大于5",否则执行 "x小于或等于5"

Go 复制代码
if x > 5 {
    fmt.Println("x大于5")
} else {
    fmt.Println("x小于或等于5")
}

3.2 if的嵌套

可以通过嵌套的方式去判断多个值

Go 复制代码
if x > 5 {
    fmt.Println("x大于5") 
} else if x < 5 {
    fmt.Println("x小于5")
} else {
    fmt.Println("x等于5")
}

if语句可以有初始化语句,初始化语句中创建的变量只在if语句块中使用。

以下代码是通过getLength方法去获取email字符串的长度,在去对长度进行判断大小是否小于1。

Go 复制代码
package main

import "fmt"

func main() {
	email := "nazhanpeng@163.com"
    // 语法糖创建
	if length := getLength(email); length < 1 {
		fmt.Println("邮箱长度小于1")
	} else {
		fmt.Println("邮箱没问题")
	}

}

func getLength(a string) int {
	return len(a)
}

四、方法

一个基本的函数需要包含函数名、参数列表、返回值类型和函数体。

例如定义一个函数名为add的函数,包含两个参数a、b,返回值类型为int类型,函数体是a+b计算两个整数的和。

Go 复制代码
func add(a int, b int) int {
    return a + b
}

函数可以有0个或多个参数。

4.1 返回结果

一般用于去终止函数并返回结果。在Go中可以返回单个值或多个值。

单个值返回已经在上面返回了。

4.1.1 多个值返回

Go 复制代码
package main

import "fmt"

func divide(a int, b int) (int, int) {
    quotient := a / b
    remainder := a % b
    return quotient, remainder
}

func main() {
    q, r := divide(4, 3)
    fmt.Println(q,r)
}

4.1.2 命名返回值

命名返回值在函数代码块内为局部变量,可以进行使用。

Go 复制代码
package main

import "fmt"

func rectangleArea(width, height int) (area int) {

    area = width * height
    return
}

func main() {
    area := rectangleArea(5,6)
    fmt.Println("area", area)
}

4.1.3 空返回语句

可以使用空return返回结果

Go 复制代码
package main

import "fmt"

func swap(a, b int) (x, y int) {
    x = b
    y = a
    return
}

func main() {
    x, y := swap(1,2)
    fmt.Println("x", y, "y", y)
}

4.1.4 按照值传递变量

意味着当一个变量传递给一个函数时,该函数收到的是该变量的副本。

我们发现x的值还是5,就说明函数无法去改变传递变量的值。

Go 复制代码
package main

import "fmt"

func main() {
	x := 5
	increment(x)

	fmt.Println("x=", x)

}

func increment(x int) {
	x++
}

明天继续更新,请关注我

相关推荐
懂点Tech1 小时前
ctfshow MISC入门图片篇(信息附加):misc41解题思路
开发语言·python
Canmag 兴隆磁性2 小时前
中大型钕铁硼产品的磁通测量与自动分选:一条产线自动化的工程实现思路
运维·学习·自动化·永磁材料
catchadmin2 小时前
PHP 8.7 协程新提案 让跨协程代码共享请求身份
开发语言·php
念何架构之路3 小时前
go-grpc设计思想
开发语言·后端·golang
酷炫码神3 小时前
Day 10|Pinia 状态管理:把散落在各组件的数据,收进一个全局仓库
android·开发语言·javascript
microrain3 小时前
SagooIoT 的缓存换后端只改一行配置,文件后端连 Redis 都不需要
物联网·缓存·golang·sagooiot
Elastic 中国社区官方博客4 小时前
我们如何通过 70 多个拉取请求,将 OpenTelemetry Java agent 迁移到 invokedynamic
java·大数据·开发语言·elasticsearch·搜索引擎·全文检索·es
tyn1884 小时前
记录本地安装nacos服务的方法及异常
java·开发语言
小黄人软件4 小时前
桌面需要整理吗?有工具自动分类
学习
步行cgn5 小时前
Spring MVC 视图机制的核心接口与类
java·开发语言·后端·spring·mvc