Go 语言

news2025/1/11 7:13:08

Go语言是云计算时代的语言

Go语言2007年诞生于Google,2009年开源,Go语言与区块链技术一样年轻

本文是对Go语言基本语法的总结

目录

Go词法单元

token

Go的token

标识符

内置数据类型标识符

常量值标识符

空白标识符

关键字

程序整体结构的关键字

声明复合结构的关键字

控制程序结构的关键字 

内置函数

操作符和分隔符

字面常量

整型字面量

浮点型字面量

字符型字面量

字符串字面量

变量

显式的完整声明

短类型声明

常量

Go的常量

预声明标识符

基本数据类型

布尔类型

整型

浮点型

复数类型

字符串

rune类型

复合数据类型

指针

数组

map

结构控制语句

if语句

switch语句

for语句

标签和跳转


Go语言简介

罗布在 2007 年 9 月 25 号 回复给 肯、罗伯特的有关新的编程语言讨论主题的邮件说在开车回家的路上我得到了些灵感,给这门编程语言取名为“go”,它很简短,易书写。

Go语言的哲学:少即是多,世界是并行的,组合优于继承,面向接口编程

Go词法单元

token

token是源程序的基本的不可分割的单元

编译器先进行词法分析,将源程序分割成一个个token

Go的token

  • 操作符
  • 纯分隔符

操作符例如‘:=’,‘+’,‘a’

纯分隔符没有任何语法意义,如空格,制表符,换行符和回车符

标识符

标识变量,类型,常量等语法对象的符号名称

Go的标识符必须是字母或下划线开头,后面可以有数字

内置数据类型标识符

整型(12个):

        byte   int   int8   int16   int32   int64   

        uint    uint8    uint16   uint32    uint64    uintptr

浮点型(2个):

        float32   float32

复数型(2个):

        complex64   complex128

字符和字符串型(2个)

        string    rune

接口型:

        error

布尔型:

        bool

常量值标识符

true   false                       //表示bool类型的两常量值,真和假

iota                                //用在连续的枚举类型声明中

nil                                  //指针/引用型的变量的默认值是nil

空白标识符

_

用来声明一个匿名的变量,在赋值表达式的左端

关键字

有特定语法意义的标识符,用户不能使用重名的自定义标识符

Go只有25个关键字

程序整体结构的关键字

package   //定义包名

import     //导入包名

const      //常量声明

var        //变量声明

func      //函数定义

defer     //延迟执行

go        //并发语法糖

return        //函数返回

声明复合结构的关键字

struct        //定义结构类型

interface        //定义接口类型

map        //声明或创建map类型

chan        //声明或创建通道类型

控制程序结构的关键字 

if else for range continue break switch select type case default fallthrough switch goto

语法糖(Syntactic sugar),也译为糖衣语法,是由英国计算机科学家彼得·约翰·兰达(Peter J. Landin)发明的一个术语,指计算机语言中添加的某种语法,这种语法对语言的功能并没有影响,但是更方便程序员使用。通常来说使用语法糖能够增加程序的可读性,从而减少程序代码出错的机会。

内置函数

内置函数就是高级语言的一种语法糖,不需要import引入

  1. append-用来追加元素到数组、slice中,返回修改后的数组、slice
  2. close-主要用来关闭channel
  3. delete-从map中删除key对应的value
  4. panic-停止常规的goroutine (panic和recover:用来做错误处理)
  5. recover-允许程序定义goroutine的panic动作
  6. real-返回complex的实部 (complex、real imag:用于创建和操作复数)
  7. imag-返回complex的虚部
  8. make-用来分配内存,返回Type本身(只能应用于slice, map, channel)
  9. new-用来分配内存,主要用来分配值类型,比如int、struct。返回指向Type的指针
  10. cap-capacity是容量的意思,用于返回某个类型的最大容量(只能用于切片和 map)
  11. copy-用于复制和连接slice,返回复制的数目
  12. len-来求长度,比如string、array、slice、map、channel ,返回长度
  13. print、println-底层打印函数,在部署环境中建议使用 fmt 包

操作符和分隔符

算术运算符含 义
+相加
-相减
*相乘
/相除
%取余数
++自增1
--自减1

比较运算符含 义
==相等
!=不相等
<小于
<=小于或等于
>大于
>=大于或等于

逻辑运算符含 义
&&逻辑与(AND),当运算符前后两个条件的结果均为 true 时,运算结果为 true
||逻辑或(OR),当运算符前后两个条件的结果中有一个为 true 时,运算结果为 true
!逻辑非(NOT),对运算符后面的条件的结果取反,当条件的结果为 true 时,整体运算结果为 false,否则为 true
位运算符含 义
&按位与(AND)操作,其结果是运算符前后的两数各对应的二进制位相与后的结果
|按位或(OR)操作,其结果是运算符前后的两数各对应的二进制位相或后的结果
^按位异或(XOR)操作,当运算符前后的两数各对应的二进制位相等时,返回 0;反之,返回 1
<<按位左移操作,该操作木质上是将某个数值乘以 2 的 n 次方,n 为左移位数。更直观地来看,其结果就是将某个数值的所有二进制位向左移了 n 个位置,并将超限的高位丢弃,低位补 0   
>>按位右移操作,该操作本质上是将某个数值除以 2 的 n 次方,n 为右移位数。更直观地来看,其结果就是将某个数值的所有二进制位向右移了 n 个位置,并将超限的低位丢弃,高位补 0   

赋值运算符含 义
=直接将运算符右侧的值赋给左侧的变量或表达式
+=先将运算符左侧的值与右侧的值相加,再将相加和赋给左侧的变量或表达式
-=赋给左侧的变量或表达式侧的值相减,再将相减差赋给左侧的变量或表达式
*=先将运算符左侧的值与右侧的值相乘,再将相乘结果赋给左侧的变量或表达式
/=先将运算符左侧的值与右侧的值相除,再将相除结果赋给左侧的变量或表达式
%=先将运算符左侧的值与右侧的值相除取余数,再将余数赋给左侧的变量或表达式
<<=先将运算符左侧的值按位左移右侧数值指定数量的位置,再将位移后的结果赋给左侧的变量或表达式
>>=先将运算符左侧的值按位右移右侧数值指定数量的位置,再将位移后的结果赋给左侧的变量或表达式
&=先将运算符左侧的值与右侧的值按位与,再将位运算后的结果赋给左侧的变量或表达式
|=先将运算符左侧的值与右侧的值按位或,再将位运算后的结果赋给左侧的变量或表达式
^=先将运算符左侧的值与右侧的值按位异或,再将位运算后的结果赋给左侧的变量或表达式

指针运算符含 义
&获取某个变量在内存中的实际地址
*声明一个指针变量

字面常量

整型字面量

表示具体的整形数值

698

0700

0xhello

浮点型字面量

表示一个浮点数值

0.

56.12

056.23

1e6

.25

.5239e5

字符型字面量

采用UTF-8编码,使用单引号括住

'a'

'豪'

'\000'

'\x07'

'\u12e4'

字符串字面量

使用双引号括住

"orz"

"大楚兴"

变量

显式的完整声明

var varName dataType [ = value]

示例

var a int = 1
var a int = 4*2
var a int = b

短类型声明

varName:=value
  • 短类型声明只能出现在函数内(包括在方法内)
  • Go语言编译器自动对数据类型进行判断
  • Go语言支持多个变量同时声明并赋值
a,b:=1,"hello"

如果一个对象的指针被多个方法或者线程引用时,那么我们成这个对象的指针发生了逃逸。

常量

Go的常量

  • 布尔型
  • 字符串型
  • 数值型

常量存储在程序的只读段里

.rodata section

ro就是read only(只读)

预声明标识符

iota

用在常量声明中,初始值是0,可以看成是一个自增枚举变量

const{
    a=iota        //a==0
    b=iota        //b==1
    c=iota        //c==2
}
/* 简写模式*/
const{
    a=iota        //a==0
    b             //b==1
    c             //c==2
}

基本数据类型

布尔类型

bool

只有true和false

不初始化,默认是false

整型

byte   int   int8   int16   int32   int64   

uint    uint8    uint16   uint32    uint64    uintptr

byte是uint8的别名

浮点型

float32        float64        

  1. 浮点数字面量被自动类型推断为float64类型
  2. 浮点数很难精确表示和存储,高精度科学计算应该使用math标准库

复数类型

complex64        complex128

complex128由两个float64组成

var value1 complex64 = 3.1 +5i

字符串

Go语言的字符串是一种基本的数据类型

  1. 字符串是常量,可以用数组索引形式访问当元素,但是不能修改某个字节的值
  2. 字符串转换成切片[]byte(s)要慎用,尤其是当数据量较大时
  3. 字符串结尾不含NULL字符
  4. 字符串的底层实现是一个二元数据结构
    type stringStruct struct{
        str unsafe.Pointer        //指向底层字节数组的指针
        len int                   //字节数组的长度
    }
  5. 基于字符串的切片和原字符串指向相同的底层字符数组,也不能修改
    a:="Hello World"
    b:=a[0:4]

遍历一个字符串

d:="Hello World"
for i:=0;i<=len(d);i++{
    fmt.Println(d[i])
}

统一码(Unicode),也叫万国码、单一码。

统一码是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。

将世界上所有的文字用2个字节统一进行编码。那样,像这样统一编码,2个字节就已经足够容纳世界上所有语言的大部分文字了。

rune类型

Go内置两种字符类型,一种是byte字节类型,一种是表示Unicode编码的字符rune

rune是uint32的别名

Go语言默认的字符编码是UTF-8类型

复合数据类型

Go语言基本的复合数据类型有指针,数组,切片,字典,通道,结构和接口

指针

声明类型为*T

Go语言支持多级指针**T

  1. *T出现在"="左边表示指针声明,*T出现在“=”表示指针指向的值
    var a = 11
    p:=&a
  2. 结构体的指针访问同C语言一样采用‘.’操作符
    type User struct{
        name string
        age int
    }
    
    stu:=User{
        name:"Peter",
        age:18,
    }
    
    p:=&stu
    
    fmt.Println(p.name)
  3. Go语言不允许指针的运算
    a:=4543
    p:=&a
    p++        //不允许此操作
  4. 允许函数返回局部变量的地址

数组

[n]elemetype

示例

var arr [2]int
array := [...]float64{7.0,8.5,9.1}

map

map创建

ma:=map[string]int{"a":1,"b":2}

结构控制语句

程序的执行在本质上就是顺序和跳转,循环也是一种跳转

if语句

  • if后面的条件判断子句不需要用小括号括起来
  • {必须放在if或者if else这行的行尾
  • Go语言没有三元运算符?:
  • if后面可以带一个简单的初始化语句,用分号来分割,作用域是整个if语句块

if x<=y{
    return y
}else{
    return x
}

if x:=f();x<y{
    return x
}else if x>z{
    return z
}else{
    return y
}

switch语句

  • 支持default语句
  • 条件表达式不一定是整数
  • fallthough语句来强制执行下一个case子句
  • switch后面也可以带一个初始化语句
switch{
    case score>=90:
        grade='A'
    case score>=80:
        grade='B'
    case score>=70:
        grade='C'
    case score>=60:
        grade='D'
    default:
        grade='F'
}

for语句

Go语言仅支持一种循环语句,for语句

Go语言的设计哲学,只提供一种方法将事情解决好

for init;condition;post{        //类似C语言中的for

}

for condition{            //类似C语言中的while

}

for{       //死循环

}

标签和跳转

goto语句用于函数内部的跳转,需要配合使用标签

goto Lable

break 跳出循环

continue  跳出for switch语句

continue  跳出本次循环

本文包含了Go语言最基础的语法,变量类型和条件控制

未完待续

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/179532.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

VBA提高篇_05日期时间函数

文章目录日期函数1. Date()2. Time()3. Now()时间数据解析函数时间运算函数DateDiff() 数据时间差DateAdd() 时间点指定跨越拓展日期函数 VBA中默认日期系统格式: #1/26/2023 12:20:25 # #月/日/年 时:分:秒# 1. Date() 获取当前系统的时间(年/月/日) 精度: 精确到秒 范围: 公…

Tomcat-HTTP服务器介绍、安装与使用

文章目录一、概述二、下载安装三、介绍四、启动Tomcat一、概述 Tomcat&#xff0c;是一个 HTTP 服务器&#xff0c;就是在 TCP 服务器的基础上&#xff0c;加上了一些额外的功能。使用 HTTP 服务器的 API。就可以来提取HTTP请求的内容&#xff0c;也可以构造HTTP响应 二、下载…

【GPLT 二阶题目集】L2-015 互评成绩

学生互评作业的简单规则是这样定的&#xff1a;每个人的作业会被k个同学评审&#xff0c;得到k个成绩。系统需要去掉一个最高分和一个最低分&#xff0c;将剩下的分数取平均&#xff0c;就得到这个学生的最后成绩。本题就要求你编写这个互评系统的算分模块。 输入格式&#xff…

HBase原理和设计

简介 HBase —— Hadoop Database的简称&#xff0c;Google BigTable的另一种开源实现方式&#xff0c;从问世之初&#xff0c;就为了解决用大量廉价的机器高速存取海量数据、实现数据分布式存储提供可靠的方案。从功能上来讲&#xff0c;HBase不折不扣是一个数据库&#xff0…

EcoStruxure Operator Terminal Expert 操作员终端专家

EcoStruxure Operator Terminal Expert&#xff08;以前称为 Vijeo XD&#xff09;是一款具有最新 UI 设计和手势的触摸屏配置软件&#xff0c;使您能够为 Magelis HMI 和 iPC 创建和编辑应用程序屏幕。 特点&#xff1a; 变量——内存中用于存储数据的命名空间。创建您需要的所…

MS-Model【3】:Medical Transformer

文章目录前言1. Abstract & Introduction1.1. Abstract1.2. Introduction2. Medical Transformer (MedT)2.1. Model structure2.2. Attention2.2.1. Self-Attention Overview2.2.2. Axial-Attention2.2.3. Gated Axial-Attention2.3. Local-Global Training2.4. Loss funct…

定位 position属性 相对定位 绝对定位 固定定位 定位下的居中 多个定位元素重叠时 补充

目录定位position属性相对定位绝对定位固定定位定位的做法&#xff1a; 定位下的居中多个定位元素重叠时补充定位 视觉格式化模型&#xff0c;大体上将页面中盒子的排列分为三种方式&#xff1a; 常规流浮动&#xff1a;float定位&#xff1a;position 定位&#xff1a;手动…

MySQL —— 数据类型

目录 一、数据类型的分类 二、数值类型 1. tinyint类型 2. bit类型 3. float类型 4. decimal类型 三、字符串类型 1. char类型 2. varchar类型 3. char和varchar的比较 四、时间日期类型 五、enum和set类型 一、数据类型的分类 分类数据类型说明数值类型BIT(M)位…

《深入浅出计算机组成原理》学习笔记 Day11

浮点数1. 浮点数的二进制转化2. 浮点数的加法和精度损失参考1. 浮点数的二进制转化 以 9.1109.1_{10}9.110​ 为例。910100129_{10} 1001_2910​10012​&#xff0c;再把小数位转换为二进制。以 0.100120.1001_20.10012​ 为例&#xff1a; 0.1001212−102−202−312−40.562…

吊打大厂:内核级安卓系统优化软件 | 雪豹速清app官网下载

雪豹速清app是当前非常热门的一款安卓系统垃圾清理优化工具&#xff0c;具有雪豹文件管理器、大文件查找、冗余文件/重复文件清理、安卓内核级垃圾清理、QQ微信专清、文件秒搜、M3U8视频合并、微信语音导出、伪装音视频查找、安装包提取等诸多特色实用功能&#xff0c;雪豹速清…

LCR TC1 测试仪

用于检测NPN PNP 晶体管 电阻 电容二极管 三极管 NMOS PMOS IGBT JFET 可控硅 红外波形 &#xff0c;具有自校准功能。我手里的是TC-V2.12k 版本红外检测方法 &#xff1a;红外遥控器对准接收口&#xff0c;然后按下发送 即可检测 检测出 usercode 和datacode产品参数1.8寸屏幕…

Python内置包Tkinter的重要控件(上)

学习了这么久的Tkinter&#xff0c;基本上把Tkinter的重要控件都学了一遍&#xff0c;本文主要对其所有重要控件以及重要函数做一个总结&#xff0c;加深对Tkinter的理解与应用。 目录 前言 控件 1. Label 2. Button 3. Entry 4. Text 5. Menu 总结 前言 包括但不限…

MyBatis(一)MyBatis概述

一、什么是框架 ● 在文献中看到的framework被翻译为框架 ● java常用的框架&#xff1a; SSM三大框架&#xff1a;SpingSpringMVCMyBatisSpringBootSpringCloud● 框架其实就是对通用代码的封装&#xff0c;提前写好了一堆接口和类&#xff0c;我们可以在做项目的时候直接引…

Golang学习日志 ━━ gin-vue-admin前后端实现tinymce编辑器的上传功能

gin-vue-admin是一套国人用golang开发的后台管理系统&#xff0c;总体还是值得推荐的&#xff0c;其前端使用element-ui&#xff0c;后端使用gin框架。 官网&#xff1a;https://www.gin-vue-admin.com/ 本文主要描述tinymce的使用&#xff0c;很简单&#xff0c;基本流程如下&…

【Git】Git 的基本使用

Git的简介 Git是一个版本管理控制系统(缩写VCS)&#xff0c;是一个工具&#xff0c;github或者gitee是git命令行工具的网站化。它可以在任何时间点&#xff0c;将文档的状态作为更新记录保存起来&#xff0c;也可以在任何时间点&#xff0c;将更新记录恢复回来。 git的诞生历…

Java 方法

文章目录1. 方法的定义和调用2. 带参方法的定义和调用3. 带返回值方法的定义和调用4. 方法的注意事项5. 方法重载6. 方法的参数传递1. 方法的定义和调用 方法是将具有独立功能的代码块组织成为一个整体&#xff0c;使其具有特殊功能的代码集。 注意&#xff1a; ① 方法必须先…

Linux设置yum命令镜像

本文所有内容基于centos7&#xff0c;理论上对于所有的centos版本都是有效的 使用虚拟机安装linux一般都是默认最小安装&#xff0c;安装完linux之后会发现很多的命令是无法使用的&#xff0c;需要使用yum install进行安装&#xff08;很多博客写使用wget下载yum源&#xff0c…

(Java高级教程)第四章必备前端基础知识-第三节1:JavaScript简介和基础语法

文章目录一&#xff1a;JavaScript简介&#xff08;1&#xff09;JavaScript概述&#xff08;2&#xff09;JavaScript特点&#xff08;3&#xff09;JavaScript运行过程&#xff08;4&#xff09;JavaScript组成&#xff08;5&#xff09;JavaScript的引入方式和基本使用&…

Flask电影网站项目

1 开发环境搭建 1.1 Windows环境 下载Python。下载PyCharm。下载virtualenv。下载MySQL。可以安转一个数据库GUI。 1.2 Linux环境 下载VMware Workstation Pro。下载ubuntu和xshell。 用xshell需要是虚拟机桥接。 下载Python。 pip install 名字 -i https://mirrors.aliy…

图片标签img

<!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>图片标签img</title> </head> <body bgcolor"beige"><!-- bgcolor 设置网页背景颜色 --> <…