输出语句
无论学那一门语言,首先先学该语言的输出语句。俗话说得好,输出"Hello, World!",代表你入门成功!!!
package main
import "fmt"
func main() {
fmt.Println("Hello, World!")
以上为一份简单的输出代码
数据类型
在 Go 编程语言中,数据类型用于声明函数和变量。
数据类型的出现是为了把数据分成所需内存大小不同的数据,编程的时候需要用大数据的时候才需要申请大内存,就可以充分利用内存。
Go 语言按类别有以下几种数据类型
| 类型 | 长度 | 默认值 | 说明 |
|---|---|---|---|
| bool | 1 | false | |
| byte | 1 | 0 | uint8 |
| int,uint | 4,8 | 0 | 默认整数类型,依据目标平台,32或64 |
| int8,uint8 | 1 | 0 | -128 |
| int16,uint16 | 2 | 0 | -2^15~(2^15)-1,0~(2^15)-1 |
| int32,uint32 | 4 | 0 | -2^31~(2^31)-1,0~(2^31)-1 |
| int64,uint64 | 8 | 0 | -2^63~(2^63)-1,0~(2^63)-1 |
| float32 | 4 | 0.0 | |
| float64 | 8 | 0.0 | 默认浮点数类型 |
| string | "" | 字符串,默认值为空字符串,而非NULL | |
| array | 数组 | ||
| struct | 结构体 | ||
| interface | nil | 接口 | |
| function | nil | 函数 | |
| map | nil | 字典,引用类型 | |
| slice | nil | 切片,引用类型 | |
| channel | nil | 通道,引用类型 |
变量定义
作为静态类型语言,go变量总是有固定的数据类型,类型决定了变量内存的长度和存储格式。我们只能修改变量值,无法改变类型。
var关键字定义
关键字var用于定义变量,和C不同,类型被放在变量后面。若显式提供初始值,可省略变量类型,由编译器推断。
var X int // 自动初始化为零
var y = false // 自动推断为bool的类型
可一次性定义多个变量,类型可相同也可不相同。
var x,y int
var a,b = 100, "abc"
常量
常量表示运行时恒定不可改变的值,通常是一些字面量。使用常量就可用一个易于阅读理解的标识符号来代替"魔法数字",也使得在调整常量值时,无须修改所有引用代码。
常量值必须是编译期可确定的字符、字符串、数字或布尔值。可指定常量类型,或由编译器通过初始化推断。
在go语言中,使用关键字const来定义常量。
const x, y int = 10, 20
const a,b = "迈莫coding", "欢迎小伙伴"
运算符
运算符使用方式和其他语言基本一样,在这里就不一一介绍了。 还是给出一段实例
package main
import "fmt"
func main() {
var a int = 21
var b int = 10
var c int
c = a + b
fmt.Println(c) // 31
c = a - b
fmt.Println(c) // 11
c = a / b
fmt.Println(c) // 2
c = a % b
fmt.Println(c) // 1
a++
fmt.Println(a) // 22
a=21 // 为了方便测试,a 这里重新赋值为 21
a--
fmt.Println(a) // 20
}
函数
函数就是将复杂的算法过程分解为若干较小任务,进行拆分,易于维护。函数被设计成相对独立,通过接收输入参数完成一段算法指令,输出或存储相关结果。因此,函数还是代码复用和测试的基本单元。
关键字func用于定义函数。
package main
import "fmt"
// 定义 Write函数 返回值有两个,一个为name,一个age为
func Write() (name string, age int) {
return "迈莫coding", 1
}
// 定义 Read函数
func Read(name string, age int) {
fmt.Println(name, " 已经 ", age, " 岁了")
}
func main() {
Read(Write()) // 迈莫coding 已经 1 岁
字符串
字符串默认值不是nil,而是""。
package main
import "fmt"
func main() {
var str string
str = "迈莫coding欢迎小伙伴"
fmt.Println(str)
切片
在数学概念中,变量在函数计算结束前不能改变其中的值,变量只是值的标签,不是值的容器。数学不容许副作用
但编程中的变量与数学不同
切片(slice)本身不是动态数组或动态指针。只是它内部采用数组存储数据,当数组长度达到数组容量时,会进行动态扩容。
大白话就是切片功能和Java中的List集合类似,动态添加数据。不像数组(array)长度是固定的,需要事先知道数据长度。
map字典
map字典也是使用频率比较高的数据结构。将其作为语言内置类型,从运行时层面进行优化,可获得更高效类型。
作为无序键值对集合,字典key值必须是支持相等运算符的数据类型,比如数字、字符串、指针、数组、结构体,以及对应接口类型。
map字典功能和Java中的map集合功能类似。
字典是应用类型,使用make函数或初始化表达语句来创建。
package main
import "fmt"
func main() {
// 定义 变量strMap
var strMap map[int]string
// 进行初始化
strMap = make(map[int]string)
// 给map 赋值
for i := 0; i < 5; i++ {
strMap[i] = "迈莫coding"
}
// 打印出map值
for k, v := range strMap{
fmt.Println(k, ":", v)
}
// 打印出map 长度
fmt.Println(len(strMap))
结构体struct
结构体(struct)将多个不同类型命名字段(field)序列打包成一个复合类型。
字段名必须唯一,可用"_"补位,支持使用自身指针类型成员。字段属性为基本数据类型。
学过Java就可以进行类比,结构体struct可以类比为Java中的类,结构体struct中字段属性可以类比为Java中类成员变量,结构体struct的方法可以类比为Java中类成员方法。
结构体(struct)语法如下:
type user struct {
name string // 字段name 其数据类型为string
age int // 字段age 其数据类型为int
}
接口
接口代表一个调用契约,是多个方法声明的集合。
接口解除了类型依赖,有助于减少用户可视方法,屏蔽内部结构和实现细节。在Go语言中,只要目标类型方法集内包含接口声明的全部方法,就被视为实现了该接口,无须做显示声明。当然,目标类型可实现多个接口。
大白话,接口是多个方法声明的集合,若一个struct类实现接口中所有方法,即表示该类实现了指定接口。
语法
type user interface{
}
好了,以上就是go语言基本语法,条件语句和循环语句因大多结果没有太大差别,所以并未列出,但由于笔者水平有限,如果有不同的见解,欢迎大家的补充