您当前的位置:首页 > 电脑百科 > 程序开发 > 语言 > Go语言

一文搞懂Go常用语法

时间:2023-03-14 11:03:39  来源:  作者:程序员升级打怪之旅

前言

本文是根据阳哥 知识星球中的资料 整理的学习笔记,第一章关于Go语言中常见的语法现象。

我的思考:

一门语言中的语法都是固定的,基础语法几乎都差不多,本篇文章涉及到 Go 入门脚本,变量,条件语句,函数等语法现象,用一篇文章梳理Go语言中可能出现的所有语言现象,便于初学者学习和复习所用。

一. Go 语言的 helloworld

源文件:

文件名:hello.go

package mAIn

import "fmt"

func main()  {
 fmt.Println("helloworld")

}

对于第一个代码的解释:

  • 源文件使用 UTF-8 编码,对 Unicode 支持良好,每个源文件都属于包的一部分,在文件头部用 package 声明所属的包名称。
  • 以.go 作为文件的拓展名
  • 相比其他语言,语句结束的分号会被默认省略
  • import 是用来导入标准库或者第三方包

其他注意事项:

  • fmt.Println​ 这里的 Println 的p 要大写;
  • 导入的包,如果有多余的可以删掉

可以直接运行:

go run main.go

图片

二. 变量

Go 语言中使用 var 定义变量,支持类型推断

1.定义两个变量并输出

package main

import "fmt"

func main()  {
 var x int32
 var y = "hello,world"
 fmt.Println("输出的结果为", x,y)
}

输出结果:

PS C:Gosrctest01> Go run .variable.Go
输出的结果为 0 hello,world

注意点:

  • 编译器会把变量的初始值初始化为零,避免出现意外
  • Printf​ 和Pringln 是有区别的,不能通用。

在函数内部,可以省略 var 关键字,但要注意赋值符号的变化:由 = 变成了 :=

package main

import "fmt"

func main()  {
  y := "hello,world"
 fmt.Println("输出的结果为",y)
}

三. 表达式

Go 语言有三种流程控制语句

3.1 if 语句

package main

func main ()  {
 var x = 100
 if x >0 {
  println("x =",x)
 }else if x < 0 {
  println("x =",-x)
 }else{
  println("x =",0)
 }
}

3.2 switch 语句

package main

func main ()  {
 x :=100
 switch  {
 case x>0:
  println("x")
 case x<0:
  println("-x")
 //case x!=0:
 // println("0")
 case x == 0:
  println("0")
 default:
  println("0")
 }
}

这里需要注意一点:

  • x=0​表示赋值,x==0 表示 ```等于``.

所以在这个 case 语句中, case x=0:​ 会报错,但可以改为!= 不等于 0

执行结果:

图片

3.3 for 语句

for 循环的用法比较多,我们来举几个例子:

案例一:
package main

func main ()  {
 //打印0 1 2 3 4
 for i:=0 ;i<5;i++{
  println(i)
 }
  
 //打印 4 3 2 1 0
 for i :=4;i>=0 ;i--{
  println(i)
 }
}

下面的 for 循环,类似于 while 循环的例子,比如while(x <5 {})

案例二:
package main

func main ()  {
 x :=0
 //打印0 1 2 3 4
 for x<5{
  println(x)
  x++
 }
}

案例三:打印从 10 到 0 的值

package main

func main ()  {
 x :=10
 for {
  println(x)
  x--
  if x < 0{
   break
  }
 }
}

图片

案例四:

有时候也会对列表进行遍历,列表定义:x:= []int{100,101,102}

package main

func main ()  {

 x :=[]int{100,101,102}
 for i,n :=range x {
  println(i,n)
 }
}

在 Go 语言中,遍历数据或切片时可以用 range,range 会产生两个值,分别是数据的索引与值,就像案例四中,i和v分别表示索引和值:

索引为 0 的时候值是 100

运行结果:

图片

四. 函数

函数可以定义多个返回值,甚至对其命名

package main

import (
 "errors"
  "fmt"
)

func div(a,b int) (int,error)  {
 if b == 0 {
  return 0,errors.New("division by zero")

 }
  return a/b,nil
}

func main(){
 a,b := 9,2  //定义多个变量
 c,err := div(a,b) //接收多个值
 fmt.Println(c,err)
 fmt.Println(a,b)
}

这里遇到一个小插曲,如下图:

图片

发现代码会提示 b 没有定义,在a/b位置有下划线,但执行结果是对的。经过反复排查和沟通,最后发现是 SDK 没有配置

沐风晓月感谢星球群里各位帮助过我的小伙伴。

五. 数据

5.1 切片

切片可以实现类似动态数组的功能:

package main

import(
 "fmt"
)

func main()  {
 x := make([]int ,0,5) //创建容量为5的切片
 for i :=0;i<10;i++{
  x=Append(x,i)  //追加数据,如果超过容量,自动分配更大空间
 }
 fmt.Println(x)
}

输出结果:

[0 1 2 3 4 5 6 7 8 9]

5.2 字典

package main

import "fmt"

func main() {
 m:=make(map[string]int) //创建字典类型对象
 m["a"] =1
 x,ok := m["b"]
 fmt.Println(x,ok)
 y,ok := m["a"]
 fmt.Println(y,ok)

}

运行结果:

图片

总结

本文后续还会持续增加一些语法现象,欢迎大家收藏备用。

本文转载自微信公众号「 程序员升级打怪之旅」



Tags:Go   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
机械设备B2B工厂外贸网站如何做Google谷歌SEO优化关键字排名?
在今天的全球化市场中,机械设备行业正面临着激烈的竞争。要在这一领域脱颖而出,拥有一个优化良好的B2B外贸网站至关重要。通过精准的谷歌SEO关键字排名,您的网站可以吸引更多海...【详细内容】
2024-04-08  Search: Go  点击:(6)  评论:(0)  加入收藏
Google搜索引擎索引的网页数量有多少?谷歌官方提供数据进行参考
Google搜索引擎索引的网页数量有多少?二十世纪九十年代,网页的索引数量成了一个各大搜索引擎相互对比的指标。小编记得2000年谷歌搜索引擎的首页搜索框上方,还标记着谷歌索引的...【详细内容】
2024-03-27  Search: Go  点击:(15)  评论:(0)  加入收藏
在Java应用程序中释放峰值性能:配置文件引导优化(PGO)概述
译者 | 李睿审校 | 重楼在Java开发领域,优化应用程序的性能是开发人员的持续追求。配置文件引导优化(Profile-Guided Optimization,PGO)是一种功能强大的技术,能够显著地提高Ja...【详细内容】
2024-03-18  Search: Go  点击:(25)  评论:(0)  加入收藏
宝藏级Go语言开源项目——教你自己动手开发互联网搜索引擎
DIYSearchEngine 是一个能够高速采集海量互联网数据的开源搜索引擎,采用 Go 语言开发。Github 地址:https://github.com/johnlui/DIYSearchEngine运行方法首先,给自己准备一杯...【详细内容】
2024-03-12  Search: Go  点击:(19)  评论:(0)  加入收藏
Go Gin框架实现优雅地重启和停止
在Web应用程序中,有时候我们需要重启或停止服务器,无论是因为更新代码还是进行例行维护。在这种情景下,我们需要保证应用程序的可用性和数据的一致性。这就需要优雅地关闭和重...【详细内容】
2024-01-30  Search: Go  点击:(67)  评论:(0)  加入收藏
如何让Go程序以后台进程或daemon方式运行
本文探讨了如何通过Go代码实现在后台运行的程序。最近我用Go语言开发了一个WebSocket服务,我希望它能在后台运行,并在异常退出时自动重新启动。我的整体思路是将程序转为后台...【详细内容】
2024-01-26  Search: Go  点击:(60)  评论:(0)  加入收藏
深入Go底层原理,重写Redis中间件实战
Go语言以其简洁、高效和并发性能而闻名,深入了解其底层原理可以帮助我们更好地利用其优势。在本文中,我们将探讨如何深入Go底层原理,以及如何利用这些知识重新实现一个简单的Re...【详细内容】
2024-01-25  Search: Go  点击:(68)  评论:(0)  加入收藏
支付宝宣布更换Logo
鞭牛士 1月19日消息,今日,支付宝宣布更新Logo,此次最大的变化在于去掉了外框与文字,仅保留最具辨识度的“支”字标识。据了解,这是支付宝时隔4年再次更换Logo。支付宝App目前已用...【详细内容】
2024-01-19  Search: Go  点击:(71)  评论:(0)  加入收藏
Go 内存优化与垃圾收集
Go提供了自动化的内存管理机制,但在某些情况下需要更精细的微调从而避免发生OOM错误。本文将讨论Go的垃圾收集器、应用程序内存优化以及如何防止OOM(Out-Of-Memory)错误。Go...【详细内容】
2024-01-15  Search: Go  点击:(63)  评论:(0)  加入收藏
Go函数指针是如何让你的程序变慢的?
导读Go 语言的常规优化手段无需赘述,相信大家也能找到大量的经典教程。但基于 Go 的函数值问题,业界还没有太多深度讨论的内容分享。本文作者根据自己对 Go 代码的使用与调优...【详细内容】
2024-01-15  Search: Go  点击:(88)  评论:(0)  加入收藏
▌简易百科推荐
宝藏级Go语言开源项目——教你自己动手开发互联网搜索引擎
DIYSearchEngine 是一个能够高速采集海量互联网数据的开源搜索引擎,采用 Go 语言开发。Github 地址:https://github.com/johnlui/DIYSearchEngine运行方法首先,给自己准备一杯...【详细内容】
2024-03-12  OSC开源社区    Tags:Go语言   点击:(19)  评论:(0)  加入收藏
Go Gin框架实现优雅地重启和停止
在Web应用程序中,有时候我们需要重启或停止服务器,无论是因为更新代码还是进行例行维护。在这种情景下,我们需要保证应用程序的可用性和数据的一致性。这就需要优雅地关闭和重...【详细内容】
2024-01-30  源自开发者  微信公众号  Tags:Go   点击:(67)  评论:(0)  加入收藏
如何让Go程序以后台进程或daemon方式运行
本文探讨了如何通过Go代码实现在后台运行的程序。最近我用Go语言开发了一个WebSocket服务,我希望它能在后台运行,并在异常退出时自动重新启动。我的整体思路是将程序转为后台...【详细内容】
2024-01-26  Go语言圈  微信公众号  Tags:Go程序   点击:(60)  评论:(0)  加入收藏
深入Go底层原理,重写Redis中间件实战
Go语言以其简洁、高效和并发性能而闻名,深入了解其底层原理可以帮助我们更好地利用其优势。在本文中,我们将探讨如何深入Go底层原理,以及如何利用这些知识重新实现一个简单的Re...【详细内容】
2024-01-25  547蓝色星球    Tags:Go   点击:(68)  评论:(0)  加入收藏
Go 内存优化与垃圾收集
Go提供了自动化的内存管理机制,但在某些情况下需要更精细的微调从而避免发生OOM错误。本文将讨论Go的垃圾收集器、应用程序内存优化以及如何防止OOM(Out-Of-Memory)错误。Go...【详细内容】
2024-01-15  DeepNoMind  微信公众号  Tags:Go   点击:(63)  评论:(0)  加入收藏
Go函数指针是如何让你的程序变慢的?
导读Go 语言的常规优化手段无需赘述,相信大家也能找到大量的经典教程。但基于 Go 的函数值问题,业界还没有太多深度讨论的内容分享。本文作者根据自己对 Go 代码的使用与调优...【详细内容】
2024-01-15  腾讯云开发者  微信公众号  Tags:Go函数   点击:(88)  评论:(0)  加入收藏
Go编程中调用外部命令的几种场景
在很多场合, 使用Go语言需要调用外部命令来完成一些特定的任务, 例如: 使用Go语言调用Linux命令来获取执行的结果,又或者调用第三方程序执行来完成额外的任务。在go的标准库...【详细内容】
2024-01-09  suntiger    Tags:Go编程   点击:(107)  评论:(0)  加入收藏
Go 语言不支持并发读写 Map,为什么?
Go语言的map类型不支持并发读写的主要原因是并发读写会导致数据竞态(data race),这意味着多个 goroutine 可能同时访问并修改同一个 map,从而引发不确定的结果。在Go语言的设计...【详细内容】
2024-01-05  Go语言圈  微信公众号  Tags:Go 语言   点击:(81)  评论:(0)  加入收藏
Go微服务入门到容器化实践
Go微服务入门到容器化实践Go 是一门高效、现代化、快速增长的编程语言,非常适合构建 Web 应用程序。而 Docker 是一种轻量级的容器化技术,能够使得您的应用程序在任何地方运行...【详细内容】
2024-01-01  大雷家吃饭    Tags:Go微服务   点击:(63)  评论:(0)  加入收藏
你是否想知道如何应对高并发?Go语言为你提供了答案!
并发编程是当前软件领域中不可忽视的一个关键概念。随着CPU等硬件的不断发展,我们都渴望让我们的程序运行速度更快、更快。而Go语言在语言层面天生支持并发,充分利用现代CPU的...【详细内容】
2023-12-29  灵墨AI探索室  微信公众号  Tags:Go语言   点击:(110)  评论:(0)  加入收藏
站内最新
站内热门
站内头条