Go语言之基础语法

命名

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

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类:

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

基础类型

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

runestring的转换:

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

bytestring的转换:

s := "world"
s2b := []byte(s)
b2s := string(s2b)
  1. strings 包提供了许多如字符串的查询、替换、比较、截断、拆分和合并等功能。
  2. bytes 包也提供了许多类似功能的函数,但是针对和字符个有着相同结构的[]byte 类型。
  3. strconv 包提供了布尔型、整型数、浮点数和对应字符串的相互转换,还提供了双引号相关的转换。
  4. unicode 包提供了 IsDigit、IsLetter、IsUpper 和 IsLower 等类似功能,它们用于给字符分类。
  5. 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()

猜你喜欢

转载自blog.csdn.net/yijiull/article/details/109198709