这是我参与「第五届青训营 」笔记创作活动的第1天
1.什么是Go语言
Go语言时Google公司在维护一些大型的复杂项目时遇到的一些问题的反思。它具有以下特点:
2.Go语言编程环境的安装与配置
- 在官网下载安装Go语言,傻瓜式安装,跟着步骤走就行了。
- 安装完后打开命令行输入go version 出现版本号就说明安装成功了。如图所示
3. 输入以下命令对环境进行配置
go env -w GO111MODULE=on
go env -w GOPROXY=https://goproxy.cn,direct
- 下载安装VsCode
- 安装插件
6. 编写main.go文件
package main
import (
"fmt"
)
func main() {
fmt.Println("hello world")
}
使用命令go run 文件路径运行得到以下结果就没问题了
3.有哪些知名公司正在使用Go语言
4.Go语言的基础语法
- var go里面的变量可以显示声明类型,也可以不声明 := 是声明并赋值,甚至不需要var关键字
var a = 1
var b,c int = 2,3
d := 100
- for go里面只有for循环一种循环,除了for后面条件不带括号之外和其他的使用没区别
for i := 0; i <= 10; i++{
fmt.print(i + " ")
}
- if-else if-else/switch if条件判断后面不可以直接写执行语句 switch条件类型任意,并且不需要手写break
i := 20
if i < 10{
...
}else if{
...
}else {
}
反面教材
i := 2
if i < 3 fmt.Println("hhh")
if (i < 3) fmt.Println("hhh")
t := time.Now()
switch {
case t.Hour() < 12:
fmt.Println("It's before noon")
default:
fmt.Println("It's after noon")
}
- array
// 默认初始化为0
var a[5] int
b := [5] int{1,2,3,4,5}
var c[3][3] int
- slice
s := make([]string s, 3)
s[0] = "a"
s = append(s,"3)
// 复制数组
newString := make([]string, len(s))
copy(newString,s)
// 切片
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]
- map map是输出是随机顺序,既不会按照字符顺序,也不会按照输入顺序输出。
m := make(map[string]int)
m["one"] = 1
// 判断指定的键是否存在
r,ok := m["two"] // 0 false
//删除值
delete(m,"one")
m2 := map[string]int{"one": 1, "two": 2}
var m3 = map[string]int{"one": 1, "two": 2}
- range
nums := []int{2,3,,4}
for index,num := range nums{
...
}
m := map[string]int{"one":1,"two":2}
for k,v := range m{
...
}
- func
// go的函数返回值类型在参数后面,并且可以返回多个参数
func multi(a int, b int){
return a*b;
}
func exists(m map[string]string, k string) (v string, ok bool) {
v, ok = m[k]
return v, ok
}
func main(){
fmt.println(multi(3,4)) // 12
m := map[string]string{"one":"first"}
fmt.println(exist(m,"one"))
}
- point // go语言的指针主要作用在于对入参进行修改
// 传入的是副本,a修改只在函数内部有效
func add(a int){
a += 2
}
// 传入的是地址,a的修改全局有效
func add(a *int){
a += 2
}
- struct
type user struct{
name string
password string
}
- struct-method
func findUser(users []user, name string) (v *user, err error) {
for _, u := range users {
if u.name == name {
return &u, nil
}
}
return nil, errors.New("not found")
}
-
error go的异常处理会很清晰的知道哪个函数发生了异常,go显式的将异常声明出来,调用函数的时候不管有没有异常都会对可能发生的异常进行判断,在我看来,这相较于java是更繁琐的。
-
string go里面的字符串类型是内置类型,不同于java,java中的String是对象
-
fmt fmt是go的一个标准库,主要是用来做输出的,其中的函数有我们熟悉的printf,println等,不同的是printf中只需要%v这一个站位符,打印输出的详细程度分别为%v,%+v,%#v
-
json 在go中定义json字串必须将结构体的字段名首字母大写,这样后面才能够使用json.Marshal()将结构体转换为json字串。
-
time time是go里面的一个标准库,其中的format方式不同于其他语言,format里面的格式是一个示例,并且只能是这个字符串
t := time.Date(2022, 3, 27, 1, 25, 36, 0, time.UTC)
// 2022 March 27 1 25,
fmt.Println(t.Format("2006-01-02 15:04:05"))
- strconv
strconv.parseXXX(数值,进制,精度)
n, _ := strconv.ParseInt("111", 10, 64)
fmt.Println(n) // 111
- env 设置go的参数需要引用标准库os os.Getenv("PATH") //获取path的值 os.Setenv("PATH",value) //设置path的值