@Author:Runsen

最近在从 Java/python 语言转型到 go 语言,本文是Go 基础系列的文章,不会刻意追求面面俱到,但该有知识点都会覆盖。

下面我们就来简单的看看 go 语言里的这些语法吧。

文章目录

  • 变量
  • 基本类型
  • 常量

变量

Go 语言变量名由字母、数字、下划线组成,其中首个字符不能为数字。其实这就是Python,Java编码的命名要求。

Go 语言声明变量的一般形式是使用 var 关键字,这个和JavaScript很相似。

比如,我们声明一个为int类型的变量a:

var a int

可以看出,Go语言声明变量的方式为:

var <变量名> <变量类型>

我们还可以同时声明多个类型相同的变量:

var <变量名1>, <变量名2>, <变量名3>, ... <变量类型>

使用分组同时声明多个类型不同的变量:

var (<变量名1> <变量类型1><变量名2> <变量类型2><变量名3> <变量类型3>...
)

我们可以发现Go编程语言声明变量与Python和Java不同,Python不需要声明变量的类型。Java声明变量是将类型写在最前面,没有var关键字。Go声明变量的类型却在后面

下面是一个具体的例子,需要注意的是数值类型默认为 0,布尔类型默认为 false,字符串默认为""(即空字符串)

package mainimport "fmt"var i bool//类型在后func main() {var a, b, c int//多个var d stringfmt.Println(i, a, b, c, d)j, k :=  2, 3fmt.Println(j, k)
}# false 0 0 0
# 2 3

变量d由于是空字符串,所以打印出来了但是看不到。

除此之外还有一种更简洁的声明变量的方式,就是使用:=声明变量。

当我们使用:=声明变量时,不用写var也不用写类型,但是这里需要强调这种方式只能在函数内部使用,不能在函数外部使用。因此如果在函数外部声明变量时,只能使用var。

此外,这里还要一个非常需要注意的一点:我们声明的变量必须要使用,如果声明了变量,但是没使用,会在编译时报错。

比如:

package mainimport "fmt"func main() {var i boolvar j int //声明了,但没使用,会报错  j declared and not usedfmt.Println(i)
}

基本类型

像其他语言一样,go 有布尔类型,字符串类型,整数类型,浮点数类型和复数类型。

布尔类型为bool,值可取true或false,默认值为false。

字符串类型为string,默认为空字符串""。

整数类型分为:

  • 有符号数:int、int8、int16、int32 (rune)、int64
  • 无符号数:uint、uint8 (byte)、uint16、uint32、uint64

具体的数值范围查看下表

类型 长度(字节) 数值范围
int8 1 -128~127 (-2^(8-1) ~ 2^7-1)
uint8 1 0~255 (0 ~ 2^8-1)
int16 2 -32768~32767
uint16 2 0~65535
int32 4 -2^31 ~ 2^31-1 (-2147483648~2147483647)
uint32 4 0~2^32-1 (0~4294967295)
int64 8 -2^63 ~2^63-1
uint64 8 0~2^63

其中int和uint的两种类型的长度相同,取决于具体的编译器,比如在32位系统上通常为32位,在64位系统上通常为64位。

浮点数类型有两种:float32和float64,注意没有所谓的float类型。

复数类型也有两种:complex64和complex128

下面写一个定义变量赋值综合例子。

package main // 包名
import "fmt" // 导入var (a = 1b = "hello"c = true
)func main() {fmt.Println(c)variableNoValue()variableQuick()
}func variableNoValue() {var a intfmt.Println(a)
}func variableQuick() {a, b  := 5, "hello"fmt.Println(a, b)
}# true
# 0
# 5 hello

常量

Go语言使用const来声明并赋值常量,常量在编译期间就确定,后续不能更改,也就是我们常数的常量不可以修改。

const Pi float32 = 3.1415926
const Pi = 3.1415926

Go 语言中的常量定义会有一些默认的规则,主要有:

  • 定义常量时必须有值。
  • 常量组中如果不对常量赋值的话,常量的值与上面一个是一致的。
  • 常量与iota混用的话,iota会从0开始计数,多一个常量就会增加

这里大家可能对iota有些陌生,iota 在 const关键字出现时将被重置为 0(const 内部的第一行之前),const 中每新增一行常量声明将使 iota 计数一次(iota 可理解为 const 语句块中的行索引)。

下面写一个定义综合例子。

package mainimport ("fmt"
)func main() {const (a = 2b // b=2c = 5d // d=5e // e=5)fmt.Println("Hello, Go常量:", a, b, c, d, e)const (f = 1g = 1h = iota // 前面有2个常量所以这里h =2i // i 在h之后,也会自动+1j // 同理与j,自动+1k = 10l = iota // iota 并不会因为上面的k值变化,而变化依然是6)fmt.Println("Hello, Go常量:", f, g, h, i ,j, k, l)
}# Hello, Go常量: 2 2 5 5 5
# Hello, Go常量: 1 1 2 3 4 10 6

二、Go语言基础入门相关推荐

  1. R语言基础入门(全)

    R 是门语言,也是个环境.个人认为R有点像matlab. R自带多种统计学及数字分析功能.R的功能也可以通过安装包(Packages,用户撰写的功能)增强,个人感觉这个就是插件.因为S的血缘,R比其他 ...

  2. c语言用if语句abc输出最大值,C语言基础入门选择结构-if语句(78页)-原创力文档...

    C语言基础入门选择结构-if语句_电脑基础知识_IT/计算机_专业资料.第9单元选择结构-if语句<程序设计基础>北京八维研修学院第1节选择结构导入?... <程序设计基础> ...

  3. C语言基础入门学习笔记

    前言 我是一个初中生,过完暑假就是一个高一的学生了.在这个暑假里,我学习了韦东山老师和唐佐林老师的课程,所以我写下这个笔记来记录自己的成长历程. C语言基础入门学习笔记 格式 #include < ...

  4. 【学习笔记】山东大学生物信息学——Perl 语言基础入门+高级

    文章目录 8.3 Perl 语言基础入门 8.3.1 第一个 Perl 8.3.2 Perl 的基本规则 8.3.3 字符串常用函数 8.3.4 数组常用函数 8.4 Perl 语言基础高级 8.4. ...

  5. matlab语言实验二,实验二 MATLAB语言基础

    实验二 MATLAB 语言基础 一.实验目的 基本掌握 MATLAB 向量.矩阵.数组的生成及其基本运算(区分数组运算和矩阵运算).常用的数学函数.了解字符串的操作. 二.实验内容 (1) 向量的生成 ...

  6. python语言基础实验_实验二Python语言基础函数包练习.doc

    实验二Python语言基础函数包练习 实验 Python语言基础函数包练习:1208 学号: 实验目的 1.Python语言包,如math.NumPySciPy和Matplotlib等函数包的使用实验 ...

  7. QR code 二维码基础入门教程(二)

    QR code 二维码基础入门教程(二) 承接上文,让我们继续下面的步骤 纠错码编码 先说说纠错容量 纠错码可以纠正两种错误: 拒读错误(错误码位置已知),是一个没有扫到或者无法译码的符号字符,需要一 ...

  8. QR code 二维码基础入门教程

    QR code 二维码基础入门教程 本文为 QR Code Tutorial: Introduction 的总结,详细内容请查看原文 Introduction History and Informat ...

  9. php语言入门,php语言基础入门

    php语言基础入门 导语:PHP语法吸收了C语言.Java和Perl的特点,利于学习,使用广泛,主要适用于Web开发领域.下面是PHP语言基础人们知识,欢迎参考! 1. 代码嵌在内 2.输出函数ech ...

  10. Lua语言基础入门 (Lua学习一)

    Lua语言快速入门 这篇博客主要是简单的讲解一下Lua的基础知识,涉及的东西不是很深,提供一些学习的思路,对具体的技术不展开介绍,网上资料很多写的都比我好,仅仅为了使用Lua,而不是做基于Lua的项目 ...

最新文章

  1. 根本停不下来,原来学计算机可以这么有趣
  2. python函数结构图_Python数据结构与算法之图结构(Graph)实例分析
  3. 人工智能与主体时代变革
  4. 对话OTTVerse创始人Krishna Rao Vijayanagar:创业之初,挑战与机遇并存
  5. atthesametime啥意思_eachother造句并翻译
  6. java鼠标左键按下后拖动实现多选_鼠标拖拽多选功能
  7. css样式变 及实际用法
  8. 连续自然数和(洛谷-P1147)
  9. 【JavaScript】查漏补缺 —数组中reduce()方法
  10. Interllij IDEA启动Jrebe因为中文路径失败
  11. 安装过mysql和p_MAC下安装与配置MySQL
  12. 央行降息开始 房价下跌不行也要行
  13. .net Cache 需要注意的地方
  14. jszip 解压压缩包_JavaScript 实现的 zip 压缩和解压缩工具包Zip.js使用详解
  15. 【优化调度】基于NSGAII算法的车辆充电调度策略研究含Matlab代码
  16. 解决win10删除文件时找不到该项目的问题
  17. 计算机论文注释范例,论文注释的标准格式范例(范例详解论文正确书写规范)...
  18. git中将多次commit合并为一次commit
  19. 梁宁产品思维学习笔记
  20. tpshop——安装使用

热门文章

  1. WebRTC / Jitsi / 使用 jitsi 官方源安装内网演示环境过程
  2. Cpp 对象模型探索 / 类普通成员函数的调用方式
  3. C51单片机其他名词英文全称
  4. vivado2017.4启动时提示的“error when launching'E:\vivado':Launcher time out”的问题
  5. java main是多线程的吗_Java多线程之线程及其常用方法
  6. Object 转 String
  7. Hadoop源码解读系列目录
  8. HPU-- 1190 確率
  9. linux如何在shell中自动生成1到100的数组
  10. 【01】什么是AJAX