go中一定要手动把包改成main吗?
不一定需要手动将包名更改为main,这取决于你要编写的程序类型。如果你想编写一个可执行程序,那么将包名更改为main是必要的。但是如果你要编写一个库文件,你可以将包名取成任何你喜欢的名称。
值得注意的是,每个Go程序都必须包含一个main函数,而且这个函数必须在main包中定义,否则编译器会报错。当你将包名更改为main后,Go编译器会把这个包编译成一个可执行文件,其中main函数就是程序的入口点。
GO中变量类型如何定义
用var 名字的方法输入数据后可以直接判断输入的变量是什么类型
var a = "initial" **//通过var加 变量名字=**
var b, c int = 1, 2 **//写出int可以直观的知道变量是什么类型**
var d = true
**另一种方式: 变量名 :=值
常量: const 变量名= 在GO中常量没有具体的类型,会根据使用的上下文自动判断类型**
GO中if语句
注意: 1、if后面的判断条件没有括号,如果写了括号编译器会自动去掉 2、if后面的中括号直接写在判断句的后面
package main
import "fmt"
func main() {
if 7%2 == 0 {
fmt.Println("7 is even")
} else {
fmt.Println("7 is odd")
}
if 8%4 == 0 {
fmt.Println("8 is divisible by 4")
}
if num := 9; num < 0 {
fmt.Println(num, "is negative")
} else if num < 10 {
fmt.Println(num, "has 1 digit")
} else {
fmt.Println(num, "has multiple digits")
}
}
# for循环语句
package main
s := make([]string, 3)创建切片
s = append(s, "d")使用‘append’追加元素
copy(c, s)copy可以用一个切片去拷贝另一个切片的数据
** s:a b c d e f**
fmt.Println(s[2:5]) // [c d e] 输出下表从2到5(但不包括5)
fmt.Println(s[:5]) // [a b c d e]**输出下表5之前的所有数据(不包括5) **
fmt.Println(s[2:]) // [c d e f] 输出下表2之后的所有数据(包括2)
import "fmt"
func main() {
s := make([]string, 3)
s[0] = "a"
s[1] = "b"
s[2] = "c"
fmt.Println("get:", s[2]) // c
fmt.Println("len:", len(s)) // 3
s = append(s, "d")
s = append(s, "e", "f")
fmt.Println(s) // [a b c d e f]
c := make([]string, len(s))
copy(c, s)
fmt.Println(c) // [a b c d e f]
fmt.Println(s[2:5]) // [c d e]
fmt.Println(s[:5]) // [a b c d e]
fmt.Println(s[2:]) // [c d e f]
good := []string{"g", "o", "o", "d"}
fmt.Println(good) // [g o o d]
}
JSON处理
对于一个已有的结构体,我们可以什么都不做,只要保证第一个字母是大写,也就是公开字段,那么这个结构体就可以用JSON.marshaler去序列化,变成一个JSON字符串,序列化之后的字符串也能够用JSON/unmarshaler去反序列化到一个空的变量里面。这样默认序列化出来的字符串的话,它的风格是大写字母开头,而不是下划线,我们可以在后面用json tag等语法来去修改输出JSON结果里面的字段名
**json.Marshal 是一个 Go 语言标准库中的函数,用于将数据类型转换为 JSON 格式的字节数组。它的函数签名如下:
func Marshal(v interface{}) ([]byte, error)
参数 v 是要转换为 JSON 格式的数据,它必须是基本类型(如 bool、int、float、string)、结构体、数组或 slice。函数会返回一个包含 JSON 格式数据的字节数组和一个错误对象。如果转换成功,错误对象为 nil。
以下是一个例子,展示如何将一个结构体转换成 JSON 字节数组:
type Person struct {
Name string `json:"name"`
Age int `json:"age"`
}
p := Person{
Name: "Alice",
Age: 25,
}
b, err := json.Marshal(p)
if err != nil {
log.Fatal(err)
}
fmt.Println(string(b)) // 输出: {"name":"Alice","age":25}
在这个例子中,我们定义了一个名为 Person 的结构体,并为其两个字段定义了 JSON 格式的属性名。然后,我们创建一个 Person 的实例 p,并将其转换为 JSON 格式的字节数组 b,最后将其打印出来。**
package main
import (
"encoding/json"
"fmt"
)
type userInfo struct {
Name string
Age int `json:"age"`
Hobby []string
}
func main() {
a := userInfo{Name: "wang", Age: 18, Hobby: []string{"Golang", "TypeScript"}}
buf, err := json.Marshal(a)
if err != nil {
panic(err)
}
fmt.Println(buf) // [123 34 78 97...]
fmt.Println(string(buf)) // {"Name":"wang","age":18,"Hobby":["Golang","TypeScript"]}
buf, err = json.MarshalIndent(a, "", "\t")
if err != nil {
panic(err)
}
fmt.Println(string(buf))
var b userInfo
err = json.Unmarshal(buf, &b)
if err != nil {
panic(err)
}
fmt.Printf("%#v\n", b) // main.userInfo{Name:"wang", Age:18, Hobby:[]string{"Golang", "TypeScript"}}
}