go语法入门
可以参考简介 · Go语言标准库 (studygolang.com)
基础赋值
var a string = "test"
var b = 20 // 自动类型推断
c := 30.9
数组
var list [2]int
list[0] = 1
list[1] = 2
// 或者
var list [...]float32{1, 2, 3, 4, 5} // 自动推断长度
切片
// 切片长度可以改变 所以更为常用
var s = []string{"Baidu", "Google", "Bing"}
s := []int{1, 2, 3}
切片使用
// 感觉和Python的list差不多
var l = []int{1, 2, 3, 4, 5}
l[1:3] // 2, 3, 4
l[3:] // 4, 5
len(l) // 获取长度
cap(l) // 获取容量
// 追加和复制
l = append(l, 6) // 必须用这种方式追加数组
append(l1, l2) // 多个数组的结合
结构体
type Books struct {
title string
author string
subject string
book_id int
}
func main() {
// 创建一个新的结构体
fmt.Println(Books{"Go 语言", "www.runoob.com", "Go 语言教程", 6495407})
// 也可以使用 key => value 格式
fmt.Println(Books{title: "Go 语言", author: "www.runoob.com", subject: "Go 语言教程", book_id: 6495407})
// 忽略的字段为 0 或 空
fmt.Println(Books{title: "Go 语言", author: "www.runoob.com"})
}
循环和遍历
// while true
for {
...
}
// 基础for
for i := 0; i <= 10; i++ {
sum += i
}
// 遍历数组或者切片
l := []int{1, 2, 3, 4, 5}
for key, value := range l {
...
}
哈希
var m map[string]float32
m["Apple"] = 16.5
m["Banana"] = 3.14
delete(m, "Apple") // s
接口
package main
import (
"fmt"
)
type Phone interface {
call()
}
type NokiaPhone struct {
}
func (nokiaPhone NokiaPhone) call() {
fmt.Println("I am Nokia, I can call you!")
}
type IPhone struct {
}
func (iPhone IPhone) call() {
fmt.Println("I am iPhone, I can call you!")
}
func main() {
var phone Phone
phone = new(NokiaPhone)
phone.call()
phone = new(IPhone)
phone.call()
}
断言
var a interface{} = 1 // 这里a的类型是interface{}
str := strcov.Itoa(a.(int)) // 将a断言为int,从而满足strcov.Itoa(int) string