这是青训营Go语言基础语法课程自用笔记。
一、变量命名
有以下三种方法声明或定义变量:
var s string //仅声明
var s = "hello"
s := "hello"
二、输出与格式化
package main
import "fmt"
func main() {
fmt.Print("Hello World")
fmt.Println("Hello World") //输出后换行
a := point{1, 2}
fmt.Println(a) //{1 2}
fmt.Printf("a = %v\n", a) //a = {1 2}
fmt.Printf("a = %+v\n", a) //a = {x:1 y:2}
fmt.Printf("a = %#v\n", a) //a = Course01.point{x:1 y:2}
f := 3.1415926
fmt.Printf("%.2f\n", f) //3.14
}
"fmt"为输出所用的包,其中
Print函数仅输出不换行;Println函数输出并换行;Printf函数可将内容按一定格式输出,若输出的是结构体,则%v,%+v,%#v输出的结构体依次变得更具体;若为其他类型的变量,也可进行格式化输出。
运行时遇到的问题:运行‘go build xxxx/xxxx' 时出错
CreateProcess error=216, 该版本的 %1 与你运行的 Windows 版本不兼容。请查看计算机的系统信息,然后联系软件发布者
原因:在go中,应用程序的入口包要为main,而编译源码没有main包时,将无法编译输出可执行的文件
解决办法:将包名改为main即可,如果有多个包,只需存在一个main包即可
三、判断、循环、switch、数组
这三种语法与c++差别不大,去掉了括号
四、切片
- 创建切片:
s := make([]string, 3) - 在切片尾部新增元素
s = append(s, "e", "f")(可同时新增多个元素) - 且切片可按下标进行索引,用法与Python大致相同
- 获取切片中的元素个数(切片长度):
len(s) - 获取切片容量:
cap(x)
五、Map
- 创建Map数组:
m := make(map[string]int) - 可在创建时加入元素:
map[string]int{"one": 1, "two": 2} - 删除元素可使用:
delete(m, "one")
六、结构体
type std struct {
name string
password string
}
func (u std) checkPW3(w string) bool { //结构体方法
return u.password == w
}
func (u *std) setPW4(w string) { //使用指针可在结构体方法中直接修改对象中的值
u.password = w
}
在函数名前使用u 结构体名即可。
七、错误处理
- 在函数中可使用:
func handler(users []user, name string) (v *user, err error),将错误与结果一并返回,若无错误则err == nil - 可使用
errors.New()创建错误报告
八、json处理
- 在结构体中使用
json:"名字",则结构体转换为json格式后结构体变量名会转换为该名字,例如下例结构体转换为json后Age将变为age
type userInfo struct {
Name string
Age int `json:"age"`
Hobby []string
}
- 将结构体转化为json格式:
buf, err := json.Marshal(a) - 将json格式转化为结构体格式:
err = json.Unmarshal(buf, &b) - 结构体转换为格式化json:
buf, err = json.MarshalIndent(a, "", "\t"),例:
a := userInfo{"wang", 18, []string{"b", "c"}} //结构体a
//格式化输出结果
{
"Name": "wang",
"age": 18,
"Hobby": [
"b",
"c"
]
}
九、数字处理
strconv包含许多数字处理函数,支持字符串转多进制数字。
- 字符串转int:
n, _ := strconv.ParseInt("23", 16, 64) - 字符串自动转换,默认int10进制:
n2, _ := strconv.Atoi("123")