Golang 学习
Go 是一种开源的、静态类型的、并发型的编程语言。它由 Google 工程师在 2007 年发布,并且在过去的几年中变得越来越流行。
Go 语言基本语法:
- 安装和配置 Go;
- 变量和常量;
- 数据类型
- 控制语句
- 函数
- 指针
- 结构体
- 接口
- 并发
二、变量和常量
Go 语言中的变量是一种存储值的容器。它可以是数字、字符串、布尔值等等。
变量声明的语法:
var variable_name type = value
例如:
var a int = 10
var b string = "Hello,World!"
var c bool = true
您也可以使用简写语法声明变量:
a := 10
b := "Hello, World!"
c := true
三、数据类型(bool)
- 布尔型
var b bool = true
- 整型(int)
整型说整数类型的变量,可以是正数、负数或 0.在 Go 语言中,整型变量的长度根据操作系统的位数而变化,
例如在 64 位系统中,int
类型的变量的长度根据操作系统的位数而变化,例如在 64 位系统中,int
类型的变量的长度为 64 位。
Go 语言还提供了其他长度的整型变量,如int8
、int16
、int32
和int64
.
例如:
var a int = 10
var b int64 = 9223372036854775807
- 浮点型(
float32
和float64
)
浮点型是带有小数的数字。Go 语言中有两种浮点型变量:float32
和float64
.例如:
var a float32 = 3.14159265358979323846
var b float64 = 3.14159265358979323846
- 复数型(
complex64
和complex128
)
复数是由实部和虚部组成的数字。Go 语言中有两种复数类型:complex64
和complex128
。例如:
var a complex64 = 1 + 2i
var b complex128 = 3 + 4i
- 字符串(
string
)
字符串是一组字符的序列,用于表示文本。在 Go 语言中,字符串是不可变的,这意味着您无法更改字符串中的单个字符。例如:
var s string = "Hello, World!"
- 字符(
rune
)
字符(rune)类型是 Go 语言中特殊的整数类型,用于表示 Unicode 字符。例如:
var r rune = '中'
- 字节数组(
[]byte
)
字节数组([]byte
)是一组字节的序列,可以包含任意二进制数据。例如:
var b []byte = []byte{0x48,0x65,0x6c}
- 数组(
[n]T
)
数组是一组具有相同类型的元素的序列,其中n
是数组的长度,T
是数组中元素的类型。例如:
var a [5]int = [5]int{1,2,3,4,5}
- 切片(
[]T
)
切片是一组具有相同类型的元素的序列,长度可以动态调整。切片的类型写作[]T
,其中T
是元素的类型。例如:
var a []int = []int{1,2,3,4,5}
- 结构体(
struct
)
结构体是一种复合类型,可以组合不同类型的数据。结构体是由一组字段组成,每个字段都有一个名称和一个类型。例如:
type person struct{
name string
age int
height float32
}
- 指针(
*T
)
指针是一种变量,它存储了另一个变量的内存地址。指针的类型写作*T
,其中T
是指向变量的类型。
var a int = 10
var point *int = &a
- 接口(
interface
)
接口是一组方法的集合,它们定义了一个对象的行为。接口类型可以存储实现这些方法的任何类型的值。例如:
type Car interface{
number int
}
- 函数(
func
)
函数是一组执行特定任务的语句。在 Go 语言中,函数可以具有任意数量的输入参数和任意数量的返回值。例如:
func add(a,b int)int{
return a + b
}
- 包(
package
)
Go 语言中的包是一组相关的函数、变量和其他类型的集合,它们可以被其他程序重用。每个 Go 程序都必须包含一个main
包,它是程序的入口点。例如:
package main
import "fmt"
func main(){
fmt.Println("hello,World!")
}
- 方法
Go 语言中的方法是与结构体或其他类型关联的函数。方法可以访问该类型的数据,并对其进行操作。例如:
type Rectangle struct{
width,height float32
}
func (r Rectangle) Area() float32{
return r.width * r.height
}
- 并发
Go 语言支持并非编程,它使用 goroutine 和通道(channel)来实现并发。goroutine 之间通信的管道。例如:
func main(){
c:= make(chan int)
go func(){
c<-1
}()
x:= <-c
fmt.Println(x)
}
-
错误处理
Go语言使用错误处理机制来处理程序中出现的错误。错误是一个接口类型,它可以用来表示任何类型的错误。在Go语言中,函数通常返回一个错误值作为其最后一个返回值。例如:
func ReadFile(filename string)([]byte,error){ f,err := os.Open(filename) if err != nil{ return nil,err } defer f.Close() return ioutil.ReadAll(f) }
-
测试
Go语言内置了一个测试框架,可以用于编写和运行测试。测试可以通过检查函数的输出或检查函数的副作用来验证函数的正确性。例如:
func TestAdd(t *testing.T){ if add(2,3)!=5{ t.Errorf("add(2,3) should be 5") } }
-
反射
Go语言支持反射,这意味着程序可以在运行时检查变量的类型和值。反射可以用于编写通用的函数,可以处理不同类型的变量。例如:
var x float64 = 3.14 v := reflect.ValueOf(x) fmt.Println("type",v.Type()) fmt.Println("value",v.Float())
-
JSON
Go语言内置了对JSON格式的支持。JSON是一种轻量级的数据交换格式,它易于阅读和编写,并且易于与其他语言进行交互。Go语言提供了一组标准库函数来处理JSON数据。例如:
type Person struct{ Name string `json:"name"` Age int `json:"age"` } func main(){ p := Person{Name:"Alice",Age:30} data,err := json.Marshal(p) if err != nil{ fmt.Println("error:",err) } fmt.Println(string(data)) }