Go语言是一种静态类型、编译型语言,它的语法受到了C语言的影响,但在简化代码书写和增强代码安全性方面做了很多改进。下面是Go语言基础语法和类型的详细学习指南。
Go语言中你可以使用var关键字来声明变量,并可选择立即初始化变量。
var a int = 1
var b = 2 // 类型推断
c := 3 // 简短声明,只能在函数内部使用
常量使用const关键字声明,且必须在编译时确定值。
const Pi = 3.14159
Go语言提供了一系列的基本数据类型:
var isTrue bool = true
var isFalse bool = false
fmt.Println(isTrue) // 输出:true
fmt.Println(isFalse) // 输出:false
var intVal int = 10
var int8Val int8 = 127
var int16Val int16 = 32767
var int32Val int32 = 2147483647
var int64Val int64 = 9223372036854775807
var uintVal uint = 10 // 无符号整型
fmt.Println(intVal, int8Val, int16Val, int32Val, int64Val, uintVal)
var float32Val float32 = 3.1415926535 // 单精度浮点数
var float64Val float64 = 3.141592653589793 // 双精度浮点数
fmt.Printf("%.2f\n", float32Val) // 输出:3.14
fmt.Printf("%.2f\n", float64Val) // 输出:3.14
var complex64Val complex64 = 1 + 2i
var complex128Val complex128 = 1 + 2i
fmt.Println(complex64Val) // 输出:(1+2i)
fmt.Println(complex128Val) // 输出:(1+2i)
var str string = "Hello, World!"
fmt.Println(str) // 输出:Hello, World!
在Go语言中,字符串是不可变的,字符序列使用UTF-8编码表示。字符串可以包含任意的数据,包括byte值0,但是通常用来包含人类可读的文本。文本字符串通常被解释为采用UTF-8编码的Unicode码点(rune)序列。
Go要求显式类型转换,语法为Type(v),将值v转换为Type类型。
i := 42
f := float64(i)
u := uint(f)
Go语言中的控制结构包括if、else、for和switch
if i%2 == 0 {
fmt.Println(i, "is even")
} else {
fmt.Println(i, "is odd")
}
for i := 0; i < 10; i++ {
fmt.Println(i)
}
switch os := runtime.GOOS; os {
case "darwin":
fmt.Println("OS X.")
default:
fmt.Println("%s.", os)
}
数组是具有固定大小且类型相同的元素序列。
var a [5]int // 声明一个包含5个整数的数组
切片是对数组的抽象,它提供了更加灵活的、动态大小的视图。
s := make([]int, 0, 10) // 创建一个初始长度为0、容量为10的切片
s = append(s, 2) // 向切片追加元素
映射是键值对的无序集合。
m := make(map[string]int) // 创建一个空映射
m["key"] = 42 // 设置键值对
结构体是一种聚合数据类型,它用于将不同类型的数据组合在一起。
type Vertex struct {
X, Y int
}
var v = Vertex{1, 2} // 创建一个Vertex类型的结构体变量
指针保存了值的内存地址。
var p *int
i := 42
p = &i // p指向i
*p = 21 // 通过指针p设置i的值
函数可以有多个返回值,并支持命名返回值。
func swap(x, y string) (string, string) {
return y, x
}
这些是Go语言的基础部分,学习时可以通过编写简单的程序来实践这些概念。Go的标准库中还有大量的包提供了额外的功能,比如文件操作、网络通信等等。随着对这些基础知识的熟练掌握,你可以开始探索这些高级话题,进一步提高你的Go编程能力。