千家信息网

如何入门Golang开发

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,本篇文章为大家展示了如何入门Golang开发,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。1 流程控制1.1 switch控制流程1.1.1 基本语法swit
千家信息网最后更新 2026年11月02日如何入门Golang开发

本篇文章为大家展示了如何入门Golang开发,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

1 流程控制

1.1 switch控制流程

1.1.1 基本语法

switch 表达式 {

case 表达式1, 表达式2.....:

语句块1

case 表达式3,表达式4.....:

语句块2

default:

语句块

}

1.1.2 注意细节

1)Golang 中switch的case后可以匹配多个表达式,用逗号间隔

2)Golang中case语句块后不需要break来显示跳出,程序在匹配到后执行完语句块会自动跳出switch

3)case后是一个表达式(即:常量、变量、一个有返回值的函数等)

4)case后面的表达式如果是常量,则要求不能重复

5)case后的各个表达式的值的数据类型,必须和switch的表达式数据类型一致

6)switch后可以不带表达式,类似if-else分支,如

7)switch后也可以直接声明/定义一个变量,分号结束,不推荐

8)switch穿透-fallthrough, 如果在case语句块后增加fallthrough,则会继续执行下一个case,这也叫switch穿透

9)Type switch:switch语句还可被用于Type-switch来判断某个interface变量中实际指向的变量类型,如下

1.2 for循环

1.2.1 注意细节

1)for循环的几种写法

func main() {  for i := 0; i <= 10; i++ {    fmt.Println("你好")  }}
func main() {  var i int8 = 0  for i <= 10 {    fmt.Println("你好")    i++  }}
func main() {    //死循环,通常需要配合break一起使用  for {    fmt.Println("你好")  }}

2)Golang提供了for-range的方式,可以方便遍历字符串和数组,如

func main() {  var str string = "hello北京"  //使用传统的方式遍历字符串  for i := 0; i < len(str); i++ {    fmt.Printf("i:%d, val:%c\n", i, str[i])  }        fmt.Println("---------------------------")  //使用for-range方式遍历字符串  for index, val := range str {    fmt.Printf("index:%d, val:%c\n", index, val)  }}

从输出结果来看,使用传统的方式遍历会包含中文的字符串会出现乱码,但是使用for-range的方式则正常

结论:传统for循环遍历字符串时,是按字节来遍历的,而for-range的方式是按字符来遍历的

3)Golang中没有while,do while语法

1.3 goto语句

go语言的goto语句可以直接跳转到程序中指定的行,一般不推荐使用goto语句,以免造成程序流程的混乱,使理解与调试程序都产生困难

func main() {  fmt.Println("hello word1")  goto label0  fmt.Println("hello word2")  fmt.Println("hello word3")  label0:  fmt.Println("hello word4")}

2 函数

2.1 基本语法

func 函数名 (形参列表)(返回值类型列表){

语句块

return 返回值列表

}

func cal(n1 float64, n2 float64, operation byte) float64 {  var res float64  switch operation {    case '+':      res = n1 + n2    case '-':      res = n1 - n2    case '*':      res = n1 * n2    case '/':      res = n1 / n2    default:      fmt.Println("输入错误")      }  return  res}func main() {  var n1 float64 = 3.0  var n2 float64 = 2.0  var operation byte = '*'  result := cal(n1, n2, operation)  fmt.Println("result:", result)}

2.2 包的使用

2.2.1 注意细节

1)导入包的两种方式

//方式1import "fmt"//方式2import (  "fmt"  "project1/utils")

2)在访问其他包函数、变量时,其语法是 包名.函数名

import (  "fmt"  "project1/utils")func main() {  var n1 float64 = 3.0  var n2 float64 = 2.0  var operation byte = '+'  result := utils.Cal(n1, n2, operation)  fmt.Println("result:", result)}

3)如果包名太长,go支持给包名取别名,但是取别名后,原来的包名就不能在用了

import (  "fmt"    //给包取别名  util "project1/utils")func main() {  var n1 float64 = 3.0  var n2 float64 = 2.0  var operation byte = '+'  result := util.Cal(n1, n2, operation)  fmt.Println("result:", result)}

4)在同一个包下不能有相同的函数名(也不能有相同的全局变量名),否则报重复定义

5)如果要编译成一个可执行的程序文件,就需要将这个包声明为main,即package main,如果你是写一个库,那么包名可以自定义

2.3 函数的注意细节

1)函数的形参列表可以是多个,返回值列表也可以是多个

2)如果返回值类型列表中只有一个,那么可以省略括号,如

func sum(n1 int, n2 int) int {  return n1 + n2}

3)如果返回多个值,在接收时,希望忽略某个返回值,则使用 _ 符号来时占位忽略,如

func main() {  res1, _ := SumAndSub(1, 2)  fmt.Printf("res1:%v", res1)}func SumAndSub(n1 int, n2 int) (int, int) {  sum := n1 + n2  sub := n1 - n2  return sum, sub}

4)形参列表与返回值列表的数据类型可以是基本类型与引用类型

5)函数名称的首字母如果大写表示是公开的,可以被其他包访问,如果首字母小写表示私有的,不能被其他包使用

6)函数中的变量是局部的,函数外不可用

7)基本数据类型与数组默认都是值传递的,即进行值拷贝,在函数内修改不会影响到原来的值

8)如果希望函数内的变量能够修改函数外的变量(这里的变量指的是基本数据类型),可以传入变量的地址&,然后在函数内通过指针的方式操作变量,从效果看这类似引用

9)go中函数不支持重载

10)在go中函数也是一种数据类型,可以赋值给一个变量,则该变量就是一个函数类型的变量了,通过该变量可以对函数调用,如

11)函数既然是一种数据类型,因此在go中函数可以作为形参,并且调用

12)为了简化数据类型定义,Go支持自定义数据类型

基本语法:type 自定义数据类型名称 数据类型 //这相当于一个别名,如自定义一个int的数据类型

自定义上面sum函数的数据类型

13)支持函数返回值命名,如

14)Go支持可变参数,如

2.4 init函数

2.4.1 基本介绍

每一个源文件都可以包含一个init函数,该函数会在main函数执行前执行,被go框架调用,一般用来做初始化工作

2.4.2 注意细节

1)如果一个源码文件中包含全局变量定义、init函数和main函数,那么执行的顺序为:全局变量定义-->init函数-->main函数

2.5 匿名函数

Go支持匿明函数,如果某个函数希望只调用一次,可以考虑使用匿明函数

2.5.1 匿明函数的使用方式

1)方式1:在定义匿明函数时直接调用,如

2)方式2:将匿明函数赋给一个变量(函数变量),在通过该变量来调用匿明函数

3)全局匿明函数

将匿明函数赋给一个全局变量,那么这个匿明函数就成为了一个全局匿明函数

2.6 闭包

简单理解闭包就是能够读取其他函数内部变量的函数,即定义在一个函数内部的函数,如

2.7 defer的使用

在项目中经常需要创建资源(数据库连接、文件句柄、锁等),为了在函数执行完毕后,及时释放资源,go的设计者提供了defer(延时机制)

示例1

示例2,关闭文件资源

func main() {    //关闭文件资源    file = openfile(文件名)    defer file.close()    //其他语句}

2.7.1 注意细节

在将defer语句放入到栈中时,也会将相关的值拷贝同时入栈,如下

2.8 函数参数传递的方式

1)值传递

2)引用传递

其实不管是值传递还是引用传递,传递给函数的都是变量的副本,不同的是,值传递是值的拷贝,引用传递是地址的拷贝,一般来说地址的拷贝效率高,因为数据量小,而值拷贝决定值的数据的大小,数据越大,效率越低

2.8.1 字符串函数

1)统计字符串长度,按字节统计使用内建函数len(str)

2)字符串遍历,同时处理包含中文的问题 r := []rune(str)

3)字符串转整数,使用strconv.Atoi函数

4)整数转字符串,使用strconv.Itoa函数

5)字符串转 []byte ,如 var b = []byte("hello")

6)[]byte转字符串,如 str := string([]byte{97,98,99})

7)将10进制转换为2、8、16进制的字符串使用strconv.FormatInt

8)判断字符串中是否包含子串,使用strings.Contains

9)返回字符串中有几个不重复的子串,如

10)判断字符串是否相等

2.9 日期函数

1)格式化日期,使用now.Format格式化日期,里面的日期规定必须是2006/01/02 15:04:05

2)格式化日期,使用fmt.Sprintf函数来格式化并返回一个字符串来实现

2.10 内置函数

1)new:用来分配内存,主要用来分配值类型,比如int、float32..... 返回的是指针

2)make:用来分配内存,主要用来分配引用类型,比如channel、map.....

2.11 异常处理机制

go语言追求简洁优雅,所以在Go语言中不支持传统的try...catch...finally这种处理,而是通过defer,panic,recover来处理异常,可以理解为go中可以抛出一个panic的异常,然后在defer中通过recover捕获这个异常,然后做相应处理

func test() {  //使用defer + recover来捕获和处理异常  defer func() {        //使用recover来捕获异常    err := recover()    if err != nil {      fmt.Println("出错了,cause is:", err)    }  }()  i := 10  j := 0  fmt.Println(i/j)}func main() {  test()  fmt.Println("测试")}

2.12 自定义错误

Go程序中也支持自定义错误,使用errors.New 和 panic内置函数

1)errors.New("错误信息"),会返回一个error类型的值,表示一个错误

2)panic内置函数,接收一个interface{}类型的值作为参数,可以接收error类型的变量,输出错误信息并退出。

上述内容就是如何入门Golang开发,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注行业资讯频道。

函数 变量 类型 字符 数据 字符串 方式 语句 表达式 支持 全局 拷贝 文件 程序 细节 处理 日期 语法 错误 传统 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网科技海报 哈尔滨大商圈互联网科技有限公司 北京互联网络科技有限公司 深圳齐家互联网科技 中正互联网科技招聘 深圳国际航运科技和互联网 顶级互联网科技成果有哪些 福建科技产业互联网发展 搜狐科技互联网 互联网科技和法律行业 南博望互联网科技有限公司 广州百诚互联网科技有限公司官网 半导体是互联网高科技吗 新氧科技和美国互联网有关系吗 宁波跨境商互联网科技有限公司 广州智享互联网科技 玉溪新华互联网科技怎么选 互联网的科技体现在哪里 青岛互联网科技园 每日互联网科技新闻 花魁咖啡 广州淘业互联网络科技 互联网科技保险 互联网前沿科技 中国互联网金融科技基金 西藏七维空间互联网科技有限公司 佛山市翊博互联网络科技有限公司 徐州市互联网科技有限公司 深圳互联网科技园地址 陕西彩京云互联网科技有限公司
0