数据类型
字符串(string)
package main
import (
"fmt"
"strconv"
"strings"
)
func StringTest() {
name := " yinhaiyin "
byteSet := []byte(name)
fmt.Println(byteSet)
byteList := []byte{229, 176, 185, 230, 181, 183}
fmt.Println(string(byteList))
fmt.Println([]rune(name))
fmt.Println(
strings.HasPrefix(name, "yin"),
strings.HasSuffix(name, "hai"),
strings.Contains(name, "yin"),
strings.ToUpper(name),
strings.ToLower(name),
strings.TrimLeft(name, "yin"),
strings.TrimRight(name, "yin"),
strings.Trim(name, " "),
strings.Replace(name, "hai", "hhh", -1),
strings.Split(name, "hai"),
)
v1 := "我说怎么走散了"
v2 := "原来是起风了"
fmt.Println(fmt.Sprintf("%s,%s,%b", v1, v2, 2))
v3 := v1 + v2
fmt.Println(v3)
v4 := []string{v1, v2}
v5 := strings.Join(v4, ".")
fmt.Println(v5)
var builder = new(strings.Builder)
builder.WriteString(v1)
builder.WriteString("---")
builder.WriteString(v2)
v6 := builder.String()
fmt.Println(v6)
fmt.Println(strconv.Itoa(65))
data := []rune(v1)
for index, item := range data {
fmt.Println(index, string(item))
}
msg := "hello word"
byteS := []byte(msg)
fmt.Println(byteS)
fmt.Print("输入一个name:")
var iname []string
count, err := fmt.Scan(&iname)
fmt.Println(count, iname, err)
}
整形
浮点数
数组
package main
import "fmt"
func ArrTest() {
var Arr [3]string
Arr[0] = "a"
Arr[1] = "b"
Arr[2] = "c"
Arr = [3]string{"a", "b", "c2"}
Arr = [3]string{1: "a", 0: "b", 2: "c2"}
Abc := [...]string{"b", "c"}
fmt.Println(Arr, Abc)
var number *[3]int
var number2 = new([3]int)
fmt.Println(number, number2)
nums := [3]int8{11, 23, 43}
fmt.Printf("数组内存地址:%p\n", &nums)
fmt.Printf("数组第1个元素内存地址:%p\n", &nums[0])
fmt.Printf("数组第2个元素内存地址:%p\n", &nums[1])
fmt.Printf("数组第3个元素内存地址:%p\n", &nums[2])
name1 := [2]string{"云海", "yunhai"}
name2 := name1
name1[0] = "test"
fmt.Printf("%s, %s, %p, %p, %d\n", name1, name2, &name1, &name2, len(name1))
fmt.Println("*************************")
v1 := [2]string{"云海", "yunhai"}
fmt.Println(len(v1))
fmt.Println(v1[0])
d1 := v1[0]
v1[0] = "aaa"
fmt.Println(d1, v1)
nums2 := [4]int16{12, 89, 33, 44}
fmt.Println(nums2[0:2])
for index, item := range nums2 {
fmt.Println(index, item)
}
fmt.Println("****************************")
}
切片
package main
import (
"fmt"
)
func SliceTest() {
var nums []int
var data = []int{1, 2, 3}
var nums1 = make([]int, 2, 5)
var nums2 = new([]int)
var nums3 *[]int
fmt.Println(nums, data, nums1, nums2, nums3)
var v2 = make([]int, 3)
var v1 = make([]int, 1, 3)
fmt.Println("v1", len(v1), cap(v1))
fmt.Println("v2", len(v2), cap(v2))
fmt.Println("v1改变", len(v1), cap(v1))
v3 := append(v1, 3, 6)
fmt.Println(v3, v1)
v1[0] = 66
fmt.Println(v3, v1)
fmt.Printf("%p--%p\n", &v3, &v1)
fmt.Println("********自动扩容******")
v1t := []int{111, 22, 33}
v2t := append(v1t, 99)
fmt.Println(v1t, v2t, cap(v1t), cap(v2t))
fmt.Println("***********长度和容量**********")
fmt.Println(len(v1t), cap(v1t))
fmt.Println("***********索引**********")
fmt.Println(v1t[2])
fmt.Println("***********切片**********")
v3t := v1t[0:2]
v1t[0] = 90
fmt.Println(v1t[0:2], v3t)
fmt.Println("***********追加**********")
v4t := make([]int, 1, 3)
v5t := append(v4t, 2, 3)
v6t := append(v4t, []int{2, 3}...)
fmt.Println(v5t, v6t)
delSe := []int{1, 2, 3, 4, 5, 6}
delIndex := 3
newSe := append(delSe[:delIndex], delSe[delIndex+1:]...)
fmt.Println(newSe, delSe)
fmt.Println("***********插入**********")
appendIndex := 3
result := make([]int, 0, len(delSe)+1)
result = append(result, delSe[:appendIndex]...)
result = append(result, 99)
result = append(result, delSe[appendIndex:]...)
fmt.Println(result)
fmt.Println("***********变量赋值**********")
k1 := []int{1, 2}
k2 := k1
k1 = append(k1, 999)
k1[0] = 12
fmt.Printf("%p-%p\n", &k1, &k2)
fmt.Println(k1, k2)
k3 := new([]int)
fmt.Printf("%p\n", k3)
fmt.Println(len(*k3), cap(*k3))
}
Map
package main
import (
"fmt"
)
func MapTest() {
userInfo := map[string]int{"name": 1, "age": 28}
userInfo2 := map[string]int{}
userInfo3 := make(map[string]int, 10)
var row map[string]int
row = userInfo
value := new(map[string]int)
value = &userInfo
fmt.Println(userInfo, userInfo2, userInfo3, row, value)
userInfo4 := make(map[[2]int]int)
userInfo4 = map[[2]int]int{{1, 2}: 1}
fmt.Println(userInfo4)
fmt.Println("***********长度**********")
data := map[int]int{1: 2, 2: 3, 4: 5}
fmt.Println(len(data))
fmt.Println("***********嵌套**********")
d1 := map[int]map[string]int{1: {"a": 1}}
d2 := make(map[string][2]map[int]string)
d2 = map[string][2]map[int]string{"A": {{1: "a", 2: "b"}, {3: "c", 4: "d"}}}
d2["n1"] = [2]map[int]string{{1: "a", 2: "b"}, {3: "c", 4: "d"}}
fmt.Println(d1, d2)
fmt.Println("***********增删改查**********")
d3 := make(map[int]string)
d3[1] = "A"
d3[1] = "b"
d3[2] = "c"
delete(d3, 1)
fmt.Println(d3[1])
for key, value := range d3 {
fmt.Println(key, value)
}
for key := range d3 {
fmt.Println(key, d3[key])
}
for _, value := range d3 {
fmt.Println(value)
}
fmt.Println("***********键的嵌套**********")
d4 := make(map[[2]int]string)
d4[[2]int{1, 2}] = "a"
fmt.Println(d4)
}
结构体
package main
import (
"fmt"
"main/utils"
"reflect"
)
func StructTest() {
fmt.Println("**********定义***********")
type P1 struct {
name string
age int
}
type P2 struct {
name, address string
age int
}
type P3 struct {
name string
ps2 P2
}
type P4 struct {
kks string
P1
}
fmt.Println("**********初始化***********")
v1 := P1{"name", 18}
var v2 P1
v2.name = "name"
v2.age = 18
v3 := P1{
name: "",
age: 0,
}
fmt.Println(v1, v2, v3)
fmt.Println("**********结构体指针***********")
v4 := P1{name: "name", age: 12}
var v5 *P1 = new(P1)
pv4 := &v4
fmt.Println(v5, pv4)
fmt.Println("**********结构体赋值拷贝***********")
v6 := v4
v4.name = "笑死我了"
fmt.Println(v6, v4)
p1 := &P1{"a", 18}
p2 := p1
p1.name = "哦?"
fmt.Println(p1, p2)
fmt.Println("**********结构体嵌套赋值拷贝***********")
fmt.Println("**********结构体标签***********")
type MyType struct {
name string "姓名"
age int "年龄"
}
Mp := MyType{"yinhai", 19}
mpType := reflect.TypeOf(Mp)
filed1 := mpType.Field(0)
fmt.Println(filed1.Tag)
filed2, exist := mpType.FieldByName("name")
fmt.Println(filed2.Tag, exist)
fieldNum := mpType.NumField()
for i := 0; i < fieldNum; i++ {
field := mpType.Field(i)
fmt.Println(field.Name, field.Tag)
}
fmt.Println("**********类型方法(receiver)***********")
value := FuncStruct{
name: "test",
age: 18,
}
value.PrintInfo()
fmt.Println("**********结构体方法继承***********")
value2 := SchoolStruct{
FuncStruct: FuncStruct{
name: "myname",
age: 18,
},
class: "203班",
}
value2.PrintInfo()
value2.PrintSchoolInfo()
fmt.Println("**********结构体工厂***********")
NewFuncStruct("myname", 18)
toolPerson := utils.NewPerson("强制工厂", 18)
toolPerson.PrintInfo()
}
type FuncStruct struct {
name string "姓名"
age int "年龄"
}
func (i *FuncStruct) PrintInfo() {
fmt.Println(i.age, i.name)
}
type SchoolStruct struct {
FuncStruct
class string
}
func (i *SchoolStruct) PrintSchoolInfo() {
fmt.Println(i.class, i.name, i.age)
}
func NewFuncStruct(name string, age int) *FuncStruct {
return &FuncStruct{name: name, age: age}
}