幸いですlog

log
Golang~简单学习
🏃🏻‍♂️

Golang~简单学习

description
基本尝试go语法
Created
Jun 3, 2022 09:21 AM
Updated
Last updated June 4, 2022

基本学习

查看文档 go doc builtin.方法名
输入时如果有空格 需要用bufio.NewReader(os.Stdin)去读

数组扩容的问题

新容量 cap 旧容量 old.cap 最终容量 newcap if cap > 2*old.cap newcap=cap else if old.cap<1042 newcap=  2*old.cap else if old.cap>=1042 newcap= old.cap(1+1/4) else newcap溢出  newcap=cap
切片不保存具体的值
// make([]int ,5,10) 创建切片,长度为5,容量10,此时为 [0 0 0 0 0 0】 a1 :=[]int{1,2,3} a2 :=a1 var a3 = make([]int ,3,3) copy(a3,a1) fmt.Println(a1,a2,a3) a1[0]=100 fmt.Println(a1,a2,a3) a2 = append(a1[:1],a1[2:]...)  //取得时候改变了第二个位置的参数变为了3 fmt.Println(a1) // int[1 2 3] [1 2 3] [1 2 3] //[100 2 3] [100 2 3] [1 2 3] //[100 3 3] 修改了底层数组才能做到这种情况
& 取值 *根据地址取值

集合使用

字符串

s1:="Hello沙河" var count int for _,c :=range s1{ if unicode.Is(unicode.Han,c) { count++ } } println(count)

make和new的区别

1、make和new都是用来申请内存的
2、new很少用,一般用来给基本数据类型申请内存、string\int...
3、make是用来给slicemapchan申请内存的,make函数返回的是对应的这三个类型本身

map

map[key]vlaue
m1:=make(map[string]int,10) m1["梦想"] =9 println(m1) println("获取value:",m1["梦想"]) value,ok :=m1["理想"] if !ok { println("查无次key") }else{ println(value) } for k,v :=range m1{ println(k,v) } m1["理想"] =10 delete(m1,"理想") println(m1) /* map[梦想:9] 获取value: 9 查无次key 梦想 9 map[梦想:9] */

函数

使用命名返回值可以省略不写
func 函数名 (参数)(返回值){ return 表达式 } defer  把它后面的语句延迟到函数即将返回的时候再执行 return的顺序 1、返回值 2、defer 3、ret指令
闭包 高阶用法

panic 抛异常 recover捕获异常

fmt标准库

%#v 查看详细参数
%v 按照值原样输出
%p 指针
%c 字符
%T查看类型
%U unicode参数
notion image

type后面跟的是类型

有点类似java的类 创造结构体
type  preson struct {   name string   age int   gender string   hobby []string }

对象转json字符串

import "encoding/json" p1 :=student{ id: 1, name: "sd", } b,error :=json.Marshal(p1) if error!=nil{ fmt.Println(error) } fmt.Printf("%#v\n",string(b))
import "encoding/json" // 打开文件 type presion struct {   Name string `json:"name"`   Age int `json:"age"` } func main() {   str :=`{"name":"zhou","age":14}`   var p presion   json.Unmarshal([]byte(str),&p)   println(p.Name,p.Age) }

type接口类型

type speaker interface

文件操作 "io/ioutil"

import "os" // 打开文件 func main() { fileObj,err:=os.Open("./aug_21.go") if err!=nil { fmt.Println("Open file failed,err:%v",err) } //关闭文件 defer  fileObj.Close() //读文件 var temp [1024]byte n,err :=fileObj.Read(temp[:]) if err!=nil { fmt.Println("Open file failed,err:%v",err) } fmt.Println(n) fmt.Println(string(temp[:n])) }
notion image

日志

logger

time包

time.Now()获取时间对象
time.LoadLocation ()设置时区

ini配置文件设置

[mysql] address=10.20.30.40 port=3306 username=root password=rootroot # redis [redis] host=10.20.30.40 port=6379 password=root database=root

并发

goroutine 栈不是固定的,按需变化 最大1G
sync.WaitGroup 同步
随机库 math/rand
notion image

channel

notion image
1、发送 ch1<-1
2、接受 <-ch1
3、关闭close()
import (   "fmt"   "sync" ) var a[]int var b chan int //指定通道类型 var wg sync.WaitGroup func noBufChannel () {   fmt.Println(b)   b=make(chan int)//不带缓存区通道的初始化   wg.Add(1)   go func() {      defer wg.Done()      <-b   }()   b <- 10   fmt.Println(b)   wg.Wait() } func main() {   b=make(chan int,16)//带缓存区通道的初始化   fmt.Println(b) }

曾经也有 个和你一样的人来过这里。

「姿や形は問題ではなく、「魂」が問題です。」

Vercel Logo

「健全なる魂は健全なる精神と健全なる肉体に宿る。」

「あなたの魂、受け取りました。」

VercelVercel

Clover © 2022 幸いです 全著作権所有.