1.configure
go env -w GOPATH=/Users/bytedance/go
go env -w PATH=/Users/bytedance/bin
go env -w GOPROXY=https://goproxy.cn,direct
1.1Go语言了解
Go语言优缺点
1.2 vscode+go
在vs code进入指定code编译环境
code .
go build hello.go
./hello
go run hello.go
1.3 go 项目管理
go mod init hello(在hello.go同级文件下)
go env (查看Go环境)
2.常用语法
2.1 go定义变量
package main
import "fmt"
var global1 = 100
var global2 = 200
func main() {
fmt.Println("姓名 \t年龄 \r")
var i int
fmt.Println("i=", i)
name := "hhhh"
fmt.Println("name", name)
var n1, name2, x = 100, "jack", 88
fmt.Println(x, name2, n1)
}
2.2 "+"号 字符类型
- go也可以实现字符串拼接
- float 32 float64
- 无字符型,用byte保存单个字母字符(utf8编码)
- int,int8,int16…uint,uint32…
- bool类型
- string为基本类型,字符串一旦确定就不能更改
- go里面函数也是一种数据类型
- map也是类型
【highlight】 查看数据类型和大小 - golang默认64位浮点数
fmt.Print有几个变种:
Print: 输出到控制台,不接受任何格式化操作
Println: 输出到控制台并换行
Printf : 只可以打印出格式化的字符串。只可以直接输出字符串类型的变量(不可以输出别的类型)
Sprintf:格式化并返回一个字符串而不带任何输出
Fprintf:来格式化并输出到 io.Writers 而不是 os.Stdout
2.3 字符串转换
var newstr string = "12345"
var aa int64
aa, _ = strconv.ParseInt(newstr, 10, 64)
fmt.Println(aa)
2.4 JSON序列化与反序列化
package main
import (
"encoding/json"
"fmt"
)
type Student struct {
Id int `json:"stuid"`
Name string `json:"stuname"`
}
type Class struct {
Title string
Mystudents []Student
}
func main() {
C1 := Class{
Title: "101班",
Mystudents: make([]Student, 0, 20),
}
for i := 0; i < 10; i++ {
var temp Student
temp.Id = i
temp.Name = fmt.Sprintf("stu%02d", i)
C1.Mystudents = append(C1.Mystudents, temp)
}
fmt.Printf("%v\n", C1)
data, err := json.Marshal(C1)
if err != nil {
fmt.Println("json marshal failed:", err)
return
}
fmt.Printf("%s\n", data)
jsonstr := `{
"Title":"101班",
"Mystudents":[
{
"stuid":0,
"stuname":"stu00"
},
{
"stuid":1,
"stuname":"stu01"
}]
}`
var c2 Class
json.Unmarshal([]byte(jsonstr), &c2)
if err != nil {
fmt.Printf("json unmarshal failed")
}
fmt.Printf("%v\n", c2)
}
2.5 defer用法
链接 函数返回的过程是这样的:先给返回值赋值,然后调用defer表达式,最后才是返回到调用函数中。
2.6 方法&函数
在Go语言中,函数是指不属于任何结构体、类型的方法,也就是说,函数是没有接收者的;而方法是有接收者的,我们说的方法要么是属于一个结构体的,要么属于一个新定义的类型的。
在Go语言中,函数是指不属于任何结构体、类型的方法,也就是说,函数是没有接收者的;而方法是有接收者的,我们说的方法要么是属于一个结构体的,要么属于一个新定义的类型的。
2.7 值类型接收&指针类型接收
李文周
-
当方法作用于值类型接收者时,Go语言会在代码运行时将接收者的值复制一份。在值类型接收者的方法中可以获取接收者的成员值,但修改操作只是针对副本,无法修改接收者变量本身。 -
指针类型的接收者由一个结构体的指针组成,由于指针的特性,调用方法时修改接收者指针的任意成员变量,在方法结束后,修改都是有效的。这种方式就十分接近于其他语言中面向对象中的this或者self。 例如我们为Person添加一个SetAge方法,来修改实例变量的年龄。
|