1.占位符
占位符 | 说明 | 举例 | 输出 |
---|---|---|---|
%s | 输出字符串表示(string类型或[]byte) | Printf("%s", []byte("Go语言")) | Go语言 |
%q | 双引号围绕的字符串,由Go语法安全地转义 | Printf("%q", "Go语言") | "Go语言" |
%d | 十进制表示 | Printf("%d", 0x12) | 18 |
%#v | 相应值的Go语法表示 | Printf("#v", people) | main.Human{Name:"zhangsan"} |
%T | 相应值的类型的Go语法表示 | Printf("%T", people) | main.Human |
%v | 相应值的默认格式。 | Printf("%v", people) | {zhangsan} |
%+v | 打印结构体时,会添加字段名 | Printf("%+v", people) | {Name:zhangsan} |
2.符号说明
1):= 表示声明一个语句,只能被使用在函数体内
例如:intVal := 1 相等于:
var intVal int
intVal = 1
// 可以将var f string = "goVar" 简写为 f := "goVar"
2) $i 标识获取变量i的内存地址
例如:0xf84000012
3) _ 表示空白标识符,被用于抛弃值
例如:_, b = 5, 7中5就是一个抛弃值
这样做的原因是因为Go语言中你必须使用所有被声明的变量,但有时你并不需要使用从一个函数中得到所有的返回值。
4)var : 用于变量的定义,是可以被修改的
例如:var ast string = "abc"
5) const : 用于常量的定义,是不会被修改的
例如: const AST string = "abc"
6) iota :特殊常量,可以认为是一个可以被编译器修改的常量。
iota在const关键字出现时将被重置为0(const内部的第一行之前),const中每新增一行,常量声明将使iota计数一次(iota也可以理解为const语句中的行索引)。
例如:
package main
import "fmt"
func main() {
const (
a = iota //0
b //1
c //2
d = "ha" //独立值,iota += 1
e //"ha" iota += 1
f = 100 //iota +=1
g //100 iota +=1
h = iota //7,恢复计数
i //8
)
fmt.Println(a,b,c,d,e,f,g,h,i)
}
运行结果:
0 1 2 ha ha 100 100 7 8
7)* :指针变量,指向内存地址中的值
8) defer : 延迟执行语句,类似于java中的finally,表示最后被执行。
例如
fi, _ := os.Open(fp)
defer fi.Close()
fmt.Sprintf("check file!!!")
3.类型转换
原始类型
[
{
"name": "xiao1",
"age": 3,
"gender": "boy"
},
{
"name": "xiao2",
"age": 4,
"gender": "girl"
}
]
type User struct {
Name string `json:"name"`
Age int `json:"age"`
Gender string `json:"gender"`
}
var names []string
respReturn := []User{}
err = json.Unmarshal(respBody, &respReturn)
if err != nil {
klog.Errorf("respbody:%v, err: %v\n", string(respBody), err)
}
for i := range respReturn {
names = append(names , respReturn[i].Name)
}
4.结构体Struct赋值
package main
import (
"fmt"
)
type User struct {
Id string `json:"id"`
Name string `json:"name"`
Status string `json:"status"`
Type string `json:"type"`
}
func main() {
# 方式一
var user User
user.Id = "10001"
user.Name = "李焕英"
user.Status = "启用"
user.Type = "影视"
fmt.Printf("用户信息是:%+v \n", user)
fmt.Printf("用户信息是:%#v \n", user)
fmt.Printf("用户信息是:%T \n", user)
# 方式二
filem := User{
Id: "10001",
Name: "旋转",
Status: "启用",
Type: "电视",
}
fmt.Printf("影视信息是:%+v\n", filem)
}
运行结果:
用户信息是:{Id:10001 Name:李焕英 Status:启用 Type:影视}
用户信息是:main.User{Id:"10001", Name:"李焕英", Status:"启用", Type:"影视"}
用户信息是:main.User
影视信息是:{Id:10001 Name:旋转 Status:启用 Type:电视}