内容简介:Go语言的基础组成有一下几个部分:例子:数据类型用于声明函数和变量。
一、 GO 语言结构
Go语言的基础组成有一下几个部分:
- 包声明
- 引入包
- 函数
- 变量
- 语句和表达式
- 注释
例子:
//定义包名 package main //引入fmt包 import "fmt" //定义函数, main为入口函数 func main() { /* 这是我的第一个简单的程序,我是注释 */ fmt.Println("Hello, World!") }
二、Go基础语法
- 行分隔符:一行代表一个语句结束,无需;号结尾
- 注释:单行//,多行/**/
- 标识符关键字:标识符用来命名变量、类型等程序实体,第一个字符必须是字母或下划线而不能是数字
- 关键字: 25 个关键字或保留字
36 个预定义标识符
- 空格:声明必须使用空格隔开,变量与运算符间加入空格,程序看起来更加美观
1.数据类型
数据类型用于声明函数和变量。
数据类型的出现是为了 把数据分成所需内存大小不同的数据 ,编程的时候需要用大数据的时候才需要申请大内存,就可以充分利用内存。
Go按类别划分有以下集中数据类型:
- 布尔型(BOOL)
布尔型的值只可以是常量 true 或者 false。一个简单的例子:var b bool = true。
- 数字类型
整型 int 和浮点型 float32、float64.
整型包含:
浮点型:
其他数字类型
- 字符串类型
字符串就是一串固定长度的字符连接起来的字符序列。
Go 的字符串是由单个字节连接起来的,字节使用 UTF-8 编码标识 Unicode 文本。
- 派生类型
- 指针类型(Pointer)
- 数组类型
- 结构化类型(struct)
- Channel类型
- 函数类型
- 切片类型
- 接口类型(interface)
- Map类型
2.变量
变量名由字母、数字、下划线组成,其中首个字符不能为数字
申明变量的三种格式:
- 指定变量类型,声明后若不赋值,使用默认值
var v_name v_type v_name = value
- 根据值自行判定变量类型: var v_name = value
- 省略var, 注意 :=左侧的变量不应该是已经声明过的,否则会导致编译错误
v_name := value 例如 x := 10
多变量声明
var vname1, vname2, vname3 type vname1, vname2, vname3 = v1, v2, v3 //和 python 很像,不需要显示声明类型,自动推断 var vname1, vname2, vname3 = v1, v2, v3 //出现在:=左侧的变量不应该是已经被声明过的,否则会导致编译错误 vname1, vname2, vname3 := v1, v2, v3 // 这种因式分解关键字的写法一般用于声明全局变量 var ( vname1 v_type1 vname2 v_type2 )
局部变量声明后如果没有使用编译时会报错。
3.常量
常量是一个简单值的标识符,在程序运行时,不会被修改的量。
常量中的数据类型只可以是布尔型、数字型(整数型、浮点型和复数)和字符串型。
- 定义常量的格式:
const identifier [type] = value
- 显式类型定义: const b string = "abc" - 隐式类型定义: const b = "abc" 例如 const LENGTH int = 10 const WIDTH = 10
- 常量可以用作枚举,例如:
const ( Unknown = 0 Female = 1 Male = 2 )
- 常量可以用函数(必须是内置函数)计算表达式的值,例如len(), cap(), unsafe.Sizeof()等函数。
package main import "unsafe" const ( a = "abc" b = len(a) c = unsafe.Sizeof(a) ) func main(){ println(a, b, c) }
-
iota常量
特殊常量,可以认为是一个可以被编译器修改的常量
iota在const关键字出现时将被重置为0(const内部的第一行之前),const中每新增一行常量声明将使iota计数一次(iota可理解为const语句块中的 行索引 )
用作枚举值:
const ( a = iota //0 b = iota //1 c = iota //2 ) 可简写 const ( a = iota b c )
4.运算符
-
算术运算符
假定 A 值为 10,B 值为 20
-
关系运算符
假定 A 值为 10,B 值为 20。
-
逻辑运算符
假定 A 值为 True,B 值为 False
-
位运算符
位运算符对整数在内存中的二进制位进行操作,假定 A 为60,B 为13
注意右移n位时除以2的n次方对负数无效。
下表列出了位运算符 &, |, 和 ^ 的计算:
假定 A = 60; B = 13; 其二进制数转换为:
-
赋值运算符
-
其他运算符
package main import "fmt" func main() { var a int = 4 var b int32 var c float32 var ptr *int /* 运算符实例 */ fmt.Printf("第 1 行 - a 变量类型为 = %T\n", a ); fmt.Printf("第 2 行 - b 变量类型为 = %T\n", b ); fmt.Printf("第 3 行 - c 变量类型为 = %T\n", c ); /* & 和 * 运算符实例 */ ptr = &a /* 'ptr' 包含了 'a' 变量的地址 */ fmt.Printf("a 的值为 %d\n", a); fmt.Printf("*ptr 为 %d\n", *ptr); }
-
优先级
有些运算符拥有较高的优先级,二元运算符的运算方向均是从左至右.下表列出了所有运算符以及它们的优先级,由上至下代表优先级由高到低
可以通过使用括号来临时提升某个表达式的整体运算优先级
5.条件语句
条件语句的结构:
GO提供以下条件判断语句
if…else, switch例句
if a < 20 { /* 如果条件为 true 则执行以下语句 */ fmt.Printf("a 小于 20\n" ); } else { /* 如果条件为 false 则执行以下语句 */ fmt.Printf("a 不小于 20\n" ); } switch { case grade == "A" : fmt.Printf("优秀!\n" ) case grade == "B", grade == "C" : fmt.Printf("良好\n" ) case grade == "D" : fmt.Printf("及格\n" ) case grade == "F": fmt.Printf("不及格\n" ) default: fmt.Printf("差\n" ); }
select是Go中的一个控制结构,类似于用于通信的switch语句。每个case必须是一个通信操作,要么是发送要么是接收。
select随机执行一个可运行的case。如果没有case可运行,它将阻塞,直到有case可运行。一个默认的子句应该总是可运行的。
6.循环语句
循环程序的流程图
for在go语言中3种形式
- for init; condition; post { }
- for condition { }
- for { }
init: 一般为赋值表达式,给控制变量赋初值;
condition: 关系表达式或逻辑表达式,循环控制条件;
post: 一般为赋值表达式,给控制变量增量或减量。
for 循环的 range 格式可以对 slice、map、数组、字符串等进行迭代循环。格式如下:
for key, value := range oldMap { newMap[key] = value }
for使用实例:
package main import "fmt" func main() { var b int = 15 var a int numbers := [6]int{1, 2, 3, 5} /* for 循环 */ for a := 0; a < 10; a++ { fmt.Printf("a 的值为: %d\n", a) } for a < b { a++ fmt.Printf("a 的值为: %d\n", a) } for i,x:= range numbers { fmt.Printf("第 %d 位 x 的值 = %d\n", i,x) } }
7.函数
函数是基本的代码块,用于执行一个任务,go程序最少有一个main()函数
- 函数定义:
func function_name( [parameter list] ) [return_types] { 函数体 } func:函数由 func 开始声明 function_name:函数名称,函数名和参数列表一起构成了函数签名。 parameter list:参数列表,参数就像一个占位符,当函数被调用时,你可以将值传递给参数,这个值被称为实际参数。参数列表指定的是参数类型、顺序、及参数个数。参数是可选的,也就是说函数也可以不包含参数。 return_types:返回类型,函数返回一列值。return_types 是该列值的数据类型。有些功能不需要返回值,这种情况下 return_types 不是必须的。 函数体:函数定义的代码集合。
实例:
/* 函数返回两个数的最大值 */ func max(num1, num2 int) int { /* 声明局部变量 */ var result int if (num1 > num2) { result = num1 } else { result = num2 } return result }
- 函数调用、返回多值
package main import "fmt" func swap(x, y string) (string, string) { return y, x } func main() { a, b := swap("Mahesh", "Kumar") fmt.Println(a, b) }
赞赏那是不存在的~
支付宝
微信
以上所述就是小编给大家介绍的《Go语言学习》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- GO语言学习笔记(四)GO语言控制语句
- GO语言学习笔记(一)Go语言的初步了解
- GO语言学习笔记(五)GO语言函数的简易计算
- 【Go语言学习】Linux下Go语言的安装与设置
- Go语言学习笔记02--go语言运算符与流程控制分支语句
- go语言学习
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Essential C++中文版
[美] Stanley B. Lippman / 侯捷 / 华中科技大学出版社 / 2001-8 / 39.80元
书中以4个面向来表现C++的本质:procedural(程序性的)、generic(泛型的)、object-based(个别对象的)、object-oriented(面向对象的),全书围绕着一系列逐渐繁复的程序问题,以及用以解决这些问题的语言特性。循此方式,读者不只学到C++的函数和结构,也会学习到它们的设计目的和基本原理。一起来看看 《Essential C++中文版》 这本书的介绍吧!