学习Go语言必备案例 (1)

87 篇文章 19 订阅
订阅专栏

关于Go语言安装包的下载和环境搭建,可参考:在IntelliJ idea上安装Go语言的开发环境 (在IDEA中配置 ‘go1.12.5’ 最新版本的插件)

Go语言是一个被设计用来建立简单,快速和可信赖的软件的开源程序设计语言。下面通过带注释的例子程序去详细介绍介绍 Go语言,每篇文章介绍10个案例。

1. 值

Go 拥有各值类型,包括字符串,整形,浮点型,布尔型等:

package main

import "fmt"

func main() {
	//字符串可以通过 + 连接
	fmt.Println("go" + "lang")
	//整数和浮点数
	fmt.Println("1+1 =", 1+1)
	fmt.Println("7.0/3.0 =", 7.0/3.0)
	//布尔型,还有你想要的逻辑运算符。
	fmt.Println(true && false)
	fmt.Println(true || false)
	fmt.Println(!true)
}

控制台打印结果如下:
在这里插入图片描述

2. 变量

在 Go 中,变量 被显式声明,并被编译器所用来检查函数调用时的类型正确性。

package main

import "fmt"

func main() {
	//var 声明 1 个或者多个变量
	var a string = "initial"
	fmt.Println(a)

	//也可以申明一次性声明多个变量。
	var b, c int = 1, 2
	fmt.Println(b, c)

	//Go 将自动推断已经初始化的变量类型。
	var d = true
	fmt.Println(d)

	//声明变量且没有给出对应的初始值时,变量将会初始化为零值 。例如,一个 int 的零值是 0。
	var e int
	fmt.Println(e)

	// := 语句是申明并初始化变量的简写,例如这个例子中的 var f string = "short"。
	f := "short"
	fmt.Println(f)
}

控制台打印结果如下:
在这里插入图片描述

3. 常量

Go 支持字符、字符串、布尔和数值 常量 。

package main

import (
	"fmt"
	"math"
)

const s string = "constant"

func main() {
	//const 用于声明一个常量
	fmt.Println("s = ",s)

	//const 语句可以出现在任何 var 语句可以出现的地方
	const n = 500000000
	fmt.Println("n = ", n)

	//常数表达式可以执行任意精度的运算
	const d = 3e20 / n
	fmt.Println("d = 3e20/n : " , d)

	//数值型常量是没有确定的类型的,直到它们被给定了一个类型,比如说一次显示的类型转化。
	fmt.Println("int64(d) = ",int64(d))

	//当上下文需要时,一个数可以被给定一个类型,比如变量赋值或者函数调用。
	// 举个例子,这里的 math.Sin函数需要一个 float64 的参数。
	fmt.Println("math.Sin(n) = ", math.Sin(n))
}

控制台打印结果如下:
在这里插入图片描述

4. for循环

for 是 Go 中唯一的循环结构。这里有 for 循环的三个基本使用方式。

package main

import (
	"fmt"
)

func main() {
	//1.最常用的方式,带单个循环条件
	i := 1
	for i <= 3 {
		fmt.Println(i)
		i = i + 1
	}

	//2.经典的初始化/条件/后续形式 for 循环。
	for j := 7; j <= 9; j++ {
		fmt.Println(j)
	}

	//3.不带条件的 for 循环将一直执行,直到在循环体内使用了 break 或者 return 来跳出循环。
	for {
		fmt.Println("loop")
		break
	}
}

控制台打印结果如下:
在这里插入图片描述

当我们学到 rang 语句,channels,以及其他数据结构时,将会看到一些 for 的其它使用形式

5. if/else 分支

if 和 else 分支结构在 Go 中当然是直接了当的了

package main

import (
	"fmt"
)

func main() {
	if 7%2 == 0 {
		fmt.Println("7 is even") //7是偶数
	} else {
		fmt.Println("7 is odd") //7是奇数
	}

	//也可以不要 else 只用 if 语句。
	if 8%4 == 0 {
		fmt.Println("8 is divisible by 4")
	}

	//在条件语句之前可以有一个语句;任何在这里声明的变量都可以在所有的条件分支中使用。
	if num := 9; num < 0 {
		fmt.Println(num, "is negative")
	} else if num < 10 {
		fmt.Println(num, "has 1 digit")
	} else {
		fmt.Println(num, "has multiple digits")
	}
}

控制台打印结果如下:
在这里插入图片描述

6. 分支结构(switch)

switch ,方便的条件分支语句。

package main

import (
	"fmt"
	"time"
)

func main() {
	//一个基本的 switch
	i := 2
	fmt.Print("write ", i, " as ")
	switch i {
	case 1:
		fmt.Println("one")
	case 2:
		fmt.Println("two")
	case 3:
		fmt.Println("three")
	}

	//在一个 case 语句中,你可以使用逗号来分隔多个表达式。
	// 在这个例子中,我们很好的使用了可选的default 分支。
	switch time.Now().Weekday() {
	case time.Saturday, time.Sunday:
		fmt.Println("it's the weekend")
	default:
		fmt.Println("it's a weekday")
	}

	//不带表达式的 switch 是实现 if/else 逻辑的另一种方式。
	// 这里展示了 case 表达式是如何使用非常量的。
	t := time.Now()
	switch {
	case t.Hour() < 12:
		fmt.Println("it's before noon")
	default:
		fmt.Println("it's after noon")
	}
}

控制台打印结果如下:
在这里插入图片描述

7. 数组

在 Go 中,数组 是一个固定长度的数列。

package main

import (
	"fmt"
)

func main() {
	//创建了一个数组 a 来存放刚好 5 个 int。元素的类型和长度都是数组类型的一部分。
	// 数组默认是零值的,对于 int 数组来说也就是 0。
	var a [5]int
	fmt.Println("emp:", a)

	//可以使用 array[index] = value 语法来设置数组指定位置的值,
	// 或者用 array[index] 得到值。
	a[4] = 100
	fmt.Println("set:", a)
	fmt.Println("get:", a[4])

	//使用内置函数 len 返回数组的长度
	fmt.Println("len:", len(a))

	//使用这个语法在一行内初始化一个数组
	b := [5]int{1, 2, 3, 4, 5}
	fmt.Println("dcl:", b)

	//数组的存储类型是单一的,但是你可以组合这些数据来构造多维的数据结构。
	var twoD [2][3]int
	for i := 0; i < 2; i++ {
		for j := 0; j < 3; j++ {
			twoD[i][j] = i + j
		}
	}
	fmt.Println("2d: ", twoD)
}

控制台打印结果如下:
在这里插入图片描述
在典型的 Go 程序中,相对于数组而言,slice 使用的更多。我们将在后面讨论 slice。

8. 切片

Slice 是 Go 中一个关键的数据类型,是一个比数组更加强大的序列接口

package main

import (
	"fmt"
)

func main() {
	//不像数组,slice 的类型仅由它所包含的元素决定(不像数组中还需要元素的个数)。
	// 要创建一个长度非零的空slice,需要使用内建的方法 make。
	// 这里我们创建了一个长度为3的 string 类型 slice(初始化为零值)。
	s := make([]string, 3)
	fmt.Println("emp:", s)

	//我们可以和数组一样设置和得到值
	s[0] = "a"
	s[1] = "b"
	s[2] = "c"
	fmt.Println("set:", s)
	fmt.Println("get:", s[2])

	//如你所料,len 返回 slice 的长度
	fmt.Println("len:", len(s))

	//作为基本操作的补充,slice 支持比数组更多的操作。
	// 其中一个是内建的 append,它返回一个包含了一个或者多个新值的 slice。
	// 注意我们接受返回由 append返回的新的 slice 值。
	s = append(s, "d")
	s = append(s, "e", "f")
	fmt.Println("append:", s)

	//Slice 也可以被 copy。
	// 这里我们创建一个空的和 s 有相同长度的 slice c,并且将 s 复制给 c。
	c := make([]string, len(s))
	copy(c, s)
	fmt.Println("copy:", c)

	//Slice 支持通过 slice[low:high] 语法进行“切片”操作。
	// 例如,这里得到一个包含元素 s[2], s[3],s[4] 的 slice。
	l := s[2:5]
	fmt.Println("切片之后 2-5 即s[2], s[3],s[4] 的 slice:", l)

	//这个 slice 从 s[0] 到(但是包含)s[5]。
	l = s[:5]
	fmt.Println("从 s[0] 到(但是包含)s[5]", l)

	//这个 slice 从(包含)s[2] 到 slice 的后一个值。
	l = s[2:]
	fmt.Println("从(包含)s[2] 到 slice 的后一个值", l)

	//我们可以在一行代码中声明并初始化一个 slice 变量。
	t := []string{"g", "h", "i"}
	fmt.Println("dcl:", t)

	//Slice 可以组成多维数据结构。内部的 slice 长度可以不同,这和多位数组不同。
	twoD := make([][]int, 3)
	for i := 0; i < 3; i++ {
		innerLen := i + 1
		twoD[i] = make([]int, innerLen)
		for j := 0; j < innerLen; j++ {
			twoD[i][j] = i + j
		}
	}
	fmt.Println("2d: ", twoD)
}

控制台打印结果如下:
在这里插入图片描述
现在,我们已经看过了数组和 slice,接下来我们将看看 Go 中的另一个关键的内建数据类型:map。

9. 关联数组

map 是 Go 内置关联数据类型(在一些其他的语言中称为哈希 或者字典 )。

package main

import (
	"fmt"
)

func main() {
	//要创建一个空 map,需要使用内建的 make:make(map[key-type]val-type).
	m := make(map[string]int)
	fmt.Println(m)

	//使用典型的 make[key] = val 语法来设置键值对。
	m["k1"] = 7
	m["k2"] = 13
	fmt.Println("map:", m)

	//使用 name[key] 来获取一个键的值
	v1 := m["k1"]
	fmt.Println("v1: ", v1)

	//当对一个 map 调用内建的 len 时,返回的是键值对数目
	fmt.Println("len:", len(m))

	//内建的 delete 可以从一个 map 中移除键值对
	delete(m, "k2")
	fmt.Println("map:", m)

	//当从一个 map 中取值时,可选的第二返回值指示这个键是在这个 map 中。
	// 这可以用来消除键不存在和键有零值,像 0 或者 "" 而产生的歧义。
	_, prs := m["k2"]
	fmt.Println("prs:", prs)

	//你也可以通过这个语法在同一行申明和初始化一个新的map。
	n := map[string]int{"foo": 1, "bar": 2,"zhang":3}
	fmt.Println("map:", n)
}

控制台打印结果如下:
在这里插入图片描述
注意一个 map 在使用 fmt.Println 打印的时候,是以 map[k:v k:v]的格式输出的。

10. Range 遍历

range 迭代各种各样的数据结构。让我们来看看如何在我们已经学过的数据结构上使用 rang 吧。

package main

import (
	"fmt"
)

func main() {
	//这里我们使用 range 来统计一个 slice 的元素个数。数组也可以采用这种方法。
	nums := []int{2, 4, 5, 3}
	sum := 0
	for _, num := range nums {
		sum += num
	}
	fmt.Println("sum:", sum)

	//range 在数组和 slice 中都同样提供每个项的索引和值。
	//上面我们不需要索引,所以我们使用 空值定义符_ 来忽略它。
	//有时候我们实际上是需要这个索引的。
	for i, num := range nums {
		if num == 3 {
			fmt.Println("index:", i)
		}
	}

	//range 在 map 中迭代键值对。
	kvs := map[string]string{"a": "apple", "b": "banana"}
	for k, v := range kvs {
		fmt.Printf("%s -> %s\n", k, v)
	}

	//range 在字符串中迭代 unicode 编码。
	// 第一个返回值是rune(符号,符文) 的起始字节位置,然后第二个是 rune 自己。
	for i, c := range "go" {
		fmt.Println(i, c)
	}
}

控制台打印结果如下:
在这里插入图片描述

下一篇: 学习Go语言必备案例 (2)

学习go语言的优势共1页.pdf.zip
10-28
学习go语言的优势共1页.pdf.zip
想系统学习GO语言(Golang
01-07
作者:知乎用户 ...来源:知乎 著作权归作者所有。...官方文档可以看这个中文的,比较快一些 https://go-zh.org/doc/其次参考这个Go指南,练习一遍 https://tour.go-zh.org/welcome/1现在对Go语言应该有了一个全
Go语言经典实例
寻找09之夏的博客
05-09 4970
九九乘法表 package main import "fmt" func main() { for i := 1; i <= 9; i++ { for j := 1; j <= i; j++ { fmt.Printf("%d * %d = %d\t", j, i, j*i) } fmt.Println() } } 求100~999内的水仙花数...
go语言入门详细教程
qq_55706127的博客
05-16 7330
二.对go语言基础语法的介绍
2024年最全总结了Go语言的知识点,给每一位想入门Go的小伙伴,2024年最新跳槽字节跳动
最新发布
2401_84545553的博客
05-05 418
欢迎光临✨其实我自己接触Go语言也还不到一年,20年的10月我才开始学Go的。我自己也并不是很懂,但是我希望我能帮助到你学习Go语言,我们可以一起学习交流~Go语言的吉祥物—金花鼠(我一直以为是土拨鼠。。。🤣在某搜索引擎上一搜golang一堆表情包。Go语言亦叫Golong语言,是由谷歌Goggle公司推出。肯.汤姆逊(Ken Thompson)罗布.派克(Rob Pike)和罗伯特.格里泽默(Robert Griesemer)。
GO语言】文件操作例子
cxm19830125的专栏
12-13 1362
最近由于学习GO语言,所以把python实现的一个脚本,用GO语言实现,来练习文件操作,正则表达式,并且熟悉了GO语言的很多库,和看了GO语言的库的源代码。 下面是一个统计的脚本,实现了如下功能: 1.打开当前目录下的一个文件,循环读取一行,并且利用strings库,分割这行的字符串,形成一个列表,并且分析这个列表里面的数据; 2.读取当前目前的所有文件,循环处理; package
Go进阶:总结19款Go语言日常开发中使用到的热门开源项目
SteveRocket's-Blog
05-22 7251
​ 前面的文章中已经分享了开源的关于Go语言的Web开发框架以stars数的大小进行排列,分别介绍了下Web框架的一些特点和优缺点。本篇将总结一下在日常开发过程中接触比较多的关于Go的热门开源项目(非Web开发框架),涉及到云原生,微服务,数据库,缓存等项目。同样后面的文章中将分别介绍下这些框架的功能特性和使用技巧。还是按照老规矩本篇按照github上的stars数大小依次做个排列介绍。- 高并发:Golang具有高并发的特点,可以轻松处理大量并发请求。 - 内存管理:Golang具有自动内存管理的 ​
Go 语言的实战案例 | 青训营
NEFU AB-IN's Blog
08-23 804
Go 语言的实战案例 | 青训营
Go语言学习笔记.pdf 共174页
04-11
Go语言学习笔记.pdf 共174页 Go语言学习笔记.pdf 共174页是一本关于Go语言的详细学习笔记,涵盖了Go语言的基础知识、函数、数组、Maps、Structs、接口、并发、程序结构、标准库等方面的内容。本笔记共分为三大部分...
学习 Go 语言(Golang)
01-26
学习 Go 语言(Golang),简单易懂的Go语言教程,让你分分钟学会GO语言
Go语言圣经,golang学习入门到精通
09-07
Go语言有时候被描述为“C类似语言”,或者是“21世纪的C语言”。Go从C语言继承了相似的表达式语 法、控制流结构、基础数据类型、调用参数传值、指针等很多思想,还有C语言一直所看中的编译后机器 码的运行效率以及和...
Go语言练习(贪吃蛇案例)
09-16
主要面向有一定基础Go编程的开发人员,Go语言编程由浅入深进行讲解、演练。希望和大家一起学习,一起分项。
GO语言项目结构示例
03-12
GO语言项目结构示例。。。。。。。。。。。。。。。。。。。。。
go 案例
点点的博客
09-15 354
package main import “fmt” import “time” //go 异步 c := make(chan string) //channel fix := func(man string) { fmt.Println(man + "1") fmt.Println(man + "2") c <- man + "ok" } fmt.Println...
Go 编程实例【常量】
wgchen
03-23 167
Go 编程实例【常量】
Go语言刷题篇】Go从0到入门1:输出、变量、常量、字符串、指针与值的简单案例
热门推荐
06-16 4万+
Go语言刷题篇】Go从0到入门1:输出、变量、常量、字符串、指针与值的简单案例
Go第一个例子
脚本小子-小贝的专栏
07-05 1299
1、例子源码package mainimport "fmt"func main() { fmt.Println("hello world.")}2、源码说明由于go是采用包,来进行管理,因此,go语法规定,程序代码第一行必须注明包名,这里是mainimport是导入标识符,便于把一些外部的已经写好的包or库,引入到本程序中func是函数的关键字,函数名为main,这是每个程序的主入口函数体内容,是...
Go语言结构示例
tjzzy的专栏
06-23 397
Go语言结构 使用指针引用结构还是挺奇怪的一件事,因为……没有->操作符了,只有.   于是就只能用点,有点搞不清到底是一个指针还是一个原始简单变量。 下面是一个打印书的程序,将书名等等信息打一下。在最后的函数printBook中,使用了指针指向一个结构Books。然后,在函数中直接写了book.title。如果是book Books,也是这么写:book.title。 package ma
GO语言学习初级之代码案例01
大爬虫Shalom的博客
10-10 193
@(go语言 黑马)[GO语言] ##判断是否为闰年 题目:手动输入一个年份,判断出该年份是否为闰年 代码如下:逻辑思路在注释中 package main import "fmt" //手动输入一个年份,判断出该年份是否为闰年 func main() { var a int fmt.Scan(&amp;a) //输入一个年份 var b bool //b为true则为闰年 fal...
pandoc go语言实现案例
05-16
下面是一个使用Go语言实现Pandoc的示例: ```go package main import ( "bytes" "fmt" "os" "os/exec" ) func main() { // 读取输入文件 inputFile := "input.md" input, err := os.ReadFile(inputFile) ...

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • 用python 打印九九乘法表的7种方式 (python经典编程案例) 436301
  • python3中超级好用的日志模块-loguru模块详解 117093
  • 设计模式概述 以及 23种设计模式的介绍 92321
  • markdown中数学符号公式和字母表示 78816
  • python3多线程实战(python3经典编程案例) 75220

分类专栏

  • 软考高级-系统架构设计师 30篇
  • python3总结和案例 145篇
  • 爬虫总结和详解 40篇
  • 网络与网络安全 5篇
  • Android逆向 7篇
  • 数据库总结和案例 53篇
  • 大数据应用和总结 5篇
  • 设计模式实战案例 25篇
  • 数据结构算法总结 29篇
  • java语言核心与案例 78篇
  • 人工智能总结和案例 8篇
  • Go语言核心与案例 87篇
  • linux相关&shell编程 21篇
  • 前端案例和总结 10篇
  • 面试总结和答案 1篇
  • C/C++总结和案例 16篇
  • 开发工具的使用 21篇
  • 常见错误汇总 9篇
  • 程序人生 11篇

最新评论

  • 系统架构设计师【补充知识】: 专业英语 (核心总结)

    2401_85111901: 支持一下,细节很到位!【我也写了一些相关领域的文章,希望能够得到博主的指导,共同进步!】

  • 系统架构设计师【补充知识】: 知识产权 (核心总结)

    ak2111: 简明扼要地阐述了概念,大幅提升了文章的实用性和参考价值。整体而言,启发性与指导性并存,专业性和实用性俱佳。

  • 系统架构设计师【补充知识】: 应用数学 (核心总结)

    ak2111: 本文以清晰易懂的语言深入解释了复杂概念,结合实用示例,逻辑严谨,观点清晰,引人入胜,是深思熟虑后的结果。结构合理,信息分层明确,让人不由得沉浸其中,受益匪浅。

  • 设计模式概述 以及 23种设计模式的介绍

    ak2111: 使用设计模式是为了重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样。

  • 系统架构设计师【第19章】: 大数据架构设计理论与实践 (核心总结)

    2401_84166258: 文章内容通俗易懂,适合不同层次的读者。【我也写了一些相关领域的文章,希望能够得到博主的指导,共同进步!】

您愿意向朋友推荐“博客详情页”吗?

  • 强烈不推荐
  • 不推荐
  • 一般般
  • 推荐
  • 强烈推荐
提交

最新文章

  • 信息系统基础知识-经典题目
  • 系统架构设计师【论文-2016年 试题2】: 论软件设计模式及其应用(包括解题思路和经典范文)
  • 系统架构设计师【论文-2018年 试题3】: 论面向服务架构设计及其应用(包括解题思路和经典范文)
2024年39篇
2023年52篇
2022年45篇
2021年41篇
2020年75篇
2019年300篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

数据知道

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或 充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

深圳SEO优化公司商丘网络推广吉祥优化推荐渭南百度网站优化哪家好钦州百姓网标王推广哪家好清徐英文网站建设推荐黄冈网站建设设计茂名英文网站建设哪家好淮北seo报价防城港品牌网站设计公司甘南关键词按天收费推荐淮北seo网站优化哪家好福永网站优化排名公司宿州营销型网站建设公司商洛网站搜索优化江门关键词排名多少钱玉林SEO按效果付费推荐唐山品牌网站设计价格遂宁百姓网标王推广价格大理seo价格惠州SEO按天计费价格抚顺百度网站优化排名公司大庆网站优化推广长葛SEO按天计费公司昌吉网站seo优化多少钱焦作百搜标王推荐石岩seo价格成都网站关键词优化廊坊SEO按效果付费多少钱永湖建站推荐阳江seo优化公司歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化