AI智能
改变未来

GO语言基础(结构+语法+类型+变量)


GO语言基础(结构+语法+类型+变量)

Go语言结构

Go语言语法

Go语言类型

Go语言变量

Go 语言结构

Go 语言的基础组成有以下几个部分:

  • 包声明
  • 引入包
  • 函数
  • 变量
  • 语句 & 表达式
  • 注释

接下来让我们来看下简单的代码,该代码输出了\”Hello World!\”:实例

package mainimport \"fmt\"func main() {/* 这是我的第一个简单的程序 */fmt.Println(\"Hello, World!\")}

  

让我们来看下以上程序的各个部分:

  1. 第一行代码 package main 定义了包名。你必须在源文件中非注释的第一行指明这个文件属于哪个包,如:package main。package main表示一个可独立执行的程序,每个 Go 应用程序都包含一个名为 main 的包。
  2. 下一行 import \”fmt\” 告诉 Go 编译器这个程序需要使用 fmt 包(的函数,或其他元素),fmt 包实现了格式化 IO(输入/输出)的函数。
  3. 下一行 func main() 是程序开始执行的函数。main 函数是每一个可执行程序所必须包含的,一般来说都是在启动后第一个执行的函数(如果有 init() 函数则会先执行该函数)。
  4. 下一行 /*…*/ 是注释,在程序执行时将被忽略。单行注释是最常见的注释形式,你可以在任何地方使用以 // 开头的单行注释。多行注释也叫块注释,均已以 /* 开头,并以 */ 结尾,且不可以嵌套使用,多行注释一般用于包的文档描述或注释成块的代码片段。
  5. 下一行 fmt.Println(…) 可以将字符串输出到控制台,并在最后自动增加换行字符 \\n。

使用 fmt.Print(\”hello, world\\n\”) 可以得到相同的结果。Print 和 Println 这两个函数也支持使用变量,如:fmt.Println(arr)。如果没有特别指定,它们会以默认的打印格式将变量 arr 输出到控制台。

  1. 当标识符(包括常量、变量、类型、函数名、结构字段等等)以一个大写字母开头,如:Group1,那么使用这种形式的标识符的对象就可以被外部包的代码所使用(客户端程序需要先导入这个包),这被称为导出(像面向对象语言中的 public);标识符如果以小写字母开头,则对包外是不可见的,但是他们在整个包的内部是可见并且可用的(像面向对象语言中的 protected )。

执行 Go 程序

让我们来看下如何编写 Go 代码并执行它。步骤如下:

  1. 打开编辑器如Sublime2,将以上代码添加到编辑器中。
  2. 将以上代码保存为 hello.go
  3. 打开命令行,并进入程序文件保存的目录中。
  4. 输入命令 go run hello.go 并按回车执行代码。
  5. 如果操作正确你将在屏幕上看到 \”Hello World!\” 字样的输出。

$ go run hello.go Hello, World!

  1. 我们还可以使用 go build 命令来生成二进制文件:

$ go build hello.go $ ls hellohello.go $ ./hello Hello, World!注意需要注意的是 { 不能单独放在一行,所以以下代码在运行时会产生错误:实例

package mainimport \"fmt\"func main(){  // 错误,{ 不能在单独的行上fmt.Println(\"Hello, World!\")}

  

Go 语言基础语法

上一章节我们已经了解了 Go 语言的基本组成结构,本章节我们将学习 Go 语言的基础语法。Go 标记Go 程序可以由多个标记组成,可以是关键字,标识符,常量,字符串,符号。如以下 GO 语句由 6 个标记组成:fmt.Println(\”Hello, World!\”)6 个标记是(每行一个):1. fmt 2. . 3. Println 4. ( 5. \”Hello, World!\” 6. )行分隔符在 Go 程序中,一行代表一个语句结束。每个语句不需要像 C 家族中的其它语言一样以分号 ; 结尾,因为这些工作都将由 Go 编译器自动完成。如果你打算将多个语句写在同一行,它们则必须使用 ; 人为区分,但在实际开发中我们并不鼓励这种做法。以下为两个语句:

fmt.Println(\"Hello, World!\")fmt.Println(\"yp:runoob.com\")

注释注释不会被编译,每一个包应该有相关注释。单行注释是最常见的注释形式,你可以在任何地方使用以 // 开头的单行注释。多行注释也叫块注释,均已以 /* 开头,并以 */ 结尾。如:// 单行注释 /* Author by yp 我是多行注释 */标识符标识符用来命名变量、类型等程序实体。一个标识符实际上就是一个或是多个字母(A~Z和a~z)数字(0~9)、下划线_组成的序列,但是第一个字符必须是字母或下划线而不能是数字。以下是有效的标识符:mahesh kumar abc move_name a_123 myname50 _temp j a23b9 retVal以下是无效的标识符:

  • 1ab(以数字开头)
  • case(Go 语言的关键字)
  • a+b(运算符是不允许的)

字符串连接Go 语言的字符串可以通过 + 实现:实例

package mainimport \"fmt\"func main() {fmt.Println(\"Google\" + \"Runoob\")}

以上实例输出结果为:GoogleRunoob关键字下面列举了 Go 代码中会使用到的 25 个关键字或保留字:

break default func interface select
case defer go map struct
chan else goto package switch
const fallthrough if range type
continue for import return var

除了以上介绍的这些关键字,Go 语言还有 36 个预定义标识符:

append bool byte cap close complex complex64 complex128 uint16
copy false float32 float64 imag int int8 int16 uint32
int32 int64 iota len make new nil panic uint64
print println real recover string true uint uint8 uintptr

程序一般由关键字、常量、变量、运算符、类型和函数组成。程序中可能会使用到这些分隔符:括号 (),中括号 [] 和大括号 {}。程序中可能会使用到这些标点符号:.、,、;、: 和 …。Go 语言的空格Go 语言中变量的声明必须使用空格隔开,如:

var age int;

语句中适当使用空格能让程序更易阅读。无空格:

fruit=apples+oranges;

在变量与运算符间加入空格,程序看起来更加美观,如:

fruit = apples + oranges;

格式化字符串Go 语言中使用 fmt.Sprintf 格式化字符串并赋值给新串:实例

package mainimport (\"fmt\")func main() {// %d 表示整型数字,%s 表示字符串var stockcode=123var enddate=\"2020-12-31\"var url=\"Code=%d&endDate=%s\"var target_url=fmt.Sprintf(url,stockcode,enddate)fmt.Println(target_url)}

输出结果为:Code=123&endDate=2020-12-31

Go 语言数据类型

在 Go 编程语言中,数据类型用于声明函数和变量。数据类型的出现是为了把数据分成所需内存大小不同的数据,编程的时候需要用大数据的时候才需要申请大内存,就可以充分利用内存。Go 语言按类别有以下几种数据类型:

序号 类型和描述
1 布尔型布尔型的值只可以是常量 true 或者 false。一个简单的例子:var b bool = true。
2 数字类型整型 int 和浮点型 float32、float64,Go 语言支持整型和浮点型数字,并且支持复数,其中位的运算采用补码。
3 字符串类型:字符串就是一串固定长度的字符连接起来的字符序列。Go 的字符串是由单个字节连接起来的。Go 语言的字符串的字节使用 UTF-8 编码标识 Unicode 文本。
4 派生类型:包括:(a) 指针类型(Pointer)(b) 数组类型(c) 结构化类型(struct)(d) Channel 类型(e) 函数类型(f) 切片类型(g) 接口类型(interface)(h) Map 类型

数字类型Go 也有基于架构的类型,例如:int、uint 和 uintptr。

序号 类型和描述
1 uint8无符号 8 位整型 (0 到 255)
2 uint16无符号 16 位整型 (0 到 65535)
3 uint32无符号 32 位整型 (0 到 4294967295)
4 uint64无符号 64 位整型 (0 到 18446744073709551615)
5 int8有符号 8 位整型 (-128 到 127)
6 int16有符号 16 位整型 (-32768 到 32767)
7 int32有符号 32 位整型 (-2147483648 到 2147483647)
8 int64有符号 64 位整型 (-9223372036854775808 到 9223372036854775807)

浮点型

序号 类型和描述
1 float32IEEE-754 32位浮点型数
2 float64IEEE-754 64位浮点型数
3 complex6432 位实数和虚数
4 complex12864 位实数和虚数

其他数字类型以下列出了其他更多的数字类型:

序号 类型和描述
1 byte类似 uint8
2 rune类似 int32
3 uint32 或 64 位
4 int与 uint 一样大小
5 uintptr无符号整型,用于存放一个指针

Go 语言变量

变量来源于数学,是计算机语言中能储存计算结果或能表示值抽象概念。变量可以通过变量名访问。Go 语言变量名由字母、数字、下划线组成,其中首个字符不能为数字。声明变量的一般形式是使用 var 关键字:var identifier type可以一次声明多个变量:var identifier1, identifier2 type实例

package mainimport \"fmt\"func main() {var a string = \"Runoob\"fmt.Println(a)var b, c int = 1, 2fmt.Println(b, c)}

以上实例输出结果为:Runoob 1 2变量声明第一种,指定变量类型,如果没有初始化,则变量默认为零值。var v_name v_type v_name = value零值就是变量没有做初始化时系统默认设置的值。实例

package mainimport \"fmt\"func main() {// 声明一个变量并初始化var a = \"RUNOOB\"fmt.Println(a)// 没有初始化就为零值var b intfmt.Println(b)// bool 零值为 falsevar c boolfmt.Println(c)}

以上实例执行结果为:RUNOOB 0 false

  • 数值类型(包括complex64/128)为 0
  • 布尔类型为 false
  • 字符串为 \”\”(空字符串)
  • 以下几种类型为 nil:

var a *int var a []int var a map[string] int var a chan int var a func(string) int var a error // error 是接口实例

package mainimport \"fmt\"func main() {var i intvar f float64var b boolvar s stringfmt.Printf(\"%v %v %v %q\\n\", i, f, b, s)}

输出结果是:0 0 false \”\”第二种,根据值自行判定变量类型。var v_name = value实例

package mainimport \"fmt\"func main() {var d = truefmt.Println(d)}

输出结果是:true第三种,如果变量已经使用 var 声明过了,再使用 := 声明变量,就产生编译错误,格式:v_name := value例如:var intVal int intVal :=1 // 这时候会产生编译错误,因为 intVal 已经声明,不需要重新声明直接使用下面的语句即可:intVal := 1 // 此时不会产生编译错误,因为有声明新的变量,因为 := 是一个声明语句intVal := 1 相等于:var intVal int intVal =1可以将 var f string = \”Runoob\” 简写为 f := \”Runoob\”:实例

package mainimport \"fmt\"func main() {f := \"Runoob\" // var f string = \"Runoob\"fmt.Println(f)}

输出结果是:Runoob多变量声明//类型相同多个变量, 非全局变量 var vname1, vname2, vname3 type vname1, vname2, vname3 = v1, v2, v3 var vname1, vname2, vname3 = v1, v2, v3 // 和 python 很像,不需要显示声明类型,自动推断 vname1, vname2, vname3 := v1, v2, v3 // 出现在 := 左侧的变量不应该是已经被声明过的,否则会导致编译错误 // 这种因式分解关键字的写法一般用于声明全局变量 var ( vname1 v_type1 vname2 v_type2 )实例

package mainvar x, y intvar (  // 这种因式分解关键字的写法一般用于声明全局变量a intb bool)var c, d int = 1, 2var e, f = 123, \"hello\"

//这种不带声明格式的只能在函数体中出现//g, h := 123, \”hello\”

func main(){g, h := 123, \"hello\"println(x, y, a, b, c, d, e, f, g, h)}

以上实例执行结果为:0 0 0 false 1 2 123 hello 123 hello

赞(0) 打赏
未经允许不得转载:爱站程序员基地 » GO语言基础(结构+语法+类型+变量)