Go语言之基础语法

it2024-05-12  46

文章目录

命名变量变量声明短变量声明 数据类型基础类型复合类型数组SliceMap结构体JSON

命名

函数外部定义的包级名字,如果首字母大写,则可以被其它包访问。

var:变量 const:常量 type:类型 func:函数

变量

变量声明

var 变量名 变量类型 = 初始值

其中变量类型和初始值可以省略其一。 如果省略变量类型,那么会根据初始值自动推倒变量类型;如果省略初始值,那么会进行默认初始化为对应变量类型的零值。

短变量声明

a, b := "hi", true

简短变量声明左边的变量至少有一个是新的变量,否则需要使用多重赋值。

比较下面两份代码:

var cwd string func init() { cwd, err := os.Getwd() // 这里声明了新的cwd变量,并没有对全局的cwd赋值 if err != nil { log.Fatalf("os.Geted failed: %v", err) } log.Printf("Working directory = %s", cwd) } var cwd string func init() { var err error cwd, err = os.Getwd() if err != nil { log.Fatalf("os.Geted failed: %v", err) } log.Printf("Working directory = %s", cwd) }

数据类型

Go语言将数据类型分为4类:

基础类型:数字、字符串、布尔型复合类型:数组、结构体引用类型:指针、切片、字典、函数、通道接口类型:

基础类型

Unicode字符rune类型与int32类型等价 byte与uint8等价 字符串不可变。

rune与string的转换:

s := "hello" s2r := []rune(s) r2s := string(s2r)

byte与string的转换:

s := "world" s2b := []byte(s) b2s := string(s2b) strings 包提供了许多如字符串的查询、替换、比较、截断、拆分和合并等功能。bytes 包也提供了许多类似功能的函数,但是针对和字符个有着相同结构的[]byte 类型。strconv 包提供了布尔型、整型数、浮点数和对应字符串的相互转换,还提供了双引号相关的转换。unicode 包提供了 IsDigit、IsLetter、IsUpper 和 IsLower 等类似功能,它们用于给字符分类。path 和 path/filepath 包提供了关于文件路径的操作。

复合类型

数组

与其它语言的数组基本一致。

Slice

s := []int{0, 1, 2, 3, 4} // slice z := [...]int{0, 1, 2} // array sl := make([]int, len, cap) // slice // append底层实现可能类似cpp中的vector s = append(s, 5) s = append(s, 6, 7, 8)

Map

mp := make(map[string]int) ages := map[string]int{ "alice": 31, "bob": 32, } delete(ages, "alice") // 删除元素 for k, v := range ages { fmt.Println("%s\t%d\n", k, v) } // check if map contains a specific element val, ok := ages["jiang"] if !ok { // no // val == 0 }

结构体

匿名成员:

type Point struct { X, Y int } type Circle struct { Point Radius int } type Wheel struct { Circle Spokes int } var w Wheel w.X = 10 // equivalent to w.Circle.Point.X = 10 w.Y = 20 w.Radius = 100 w.Spokes = 30

JSON

import "encoding/json" json.Marshal() json.MarshalIndent() json.Unmarchal()
最新回复(0)