golang基础
个人学习笔记
RunMonster
要么颓废得像坨屎,要么认真得像个疯子!!
展开
-
go build
1、build#cd 对应需要编译的目录#无参数编译go build#-o 设置编译后文件名字go build -o run01#可指定编译内容go build -o run01 main.go read.go#-v 编译时显示包名#-x 打印编译时会用到的所有命令go build -v -x -o run01 main.go read.go2、打包不同操作平台GOOS:目标可执行程序运行操作系统,支持 darwin,freebsd,linux,windows原创 2021-12-09 09:50:02 · 436 阅读 · 0 评论 -
go 系统关闭时监听
package mainimport ( "fmt" "os" "os/signal" "syscall" "time")func main() { ch := make(chan os.Signal, 1) signal.Notify(ch, syscall.SIGKILL, syscall.SIGINT) go func() { time.Sleep(20 * time.Second) GracefullExit(ch) }() for { s := &l.原创 2021-07-28 18:27:53 · 715 阅读 · 0 评论 -
go 时间工具
package frameimport ( "strconv" "time")const SecondPerWeek = int64(24 * 60 * 60 * 7)const SecondPerDay = int64(24 * 60 * 60)const SecondPerHour = int64(60 * 60)const SecondPerMinute = int64(60)const SecondPerYear = int64(365 * 24 * 60 * 60)ty.原创 2021-07-28 17:44:52 · 303 阅读 · 0 评论 -
golang 排序、随机数工具、二分查找
1、sortpackage mainimport ( "fmt" "sort")type Person struct { Name string Age int}func (p Person) String() string { return fmt.Sprintf("%s: %d", p.Name, p.Age)}// ByAge implements sort.Interface for []Person based on// the Age field.ty原创 2020-10-17 15:46:30 · 253 阅读 · 0 评论 -
golang 定时器使用
package mainimport ( "fmt" "log" "time" "github.com/jasonlvhit/gocron" "github.com/robfig/cron")func task() { fmt.Println("I am runnning task.", time.Now())}func superWang() { fmt.Println("I am runnning superWang.", time.Now())}//每隔4秒执行一.原创 2020-10-17 15:43:37 · 356 阅读 · 0 评论 -
golang mail、shell、cookie、uuid
mailpackage mainimport ( "fmt" "net/smtp" "strings")func sendMain(subject string, body string, to string) { //这里需要申请授权码 auth := smtp.PlainAuth("", "5914@qq.com", "waeeg", "smtp.qq.com") tos := []string{to} nickname := "管理员" user := "5914@q原创 2020-10-13 19:26:41 · 293 阅读 · 0 评论 -
golang base64、sha256
base64package mainimport ( "encoding/base64" "fmt")/*通用编码表,编码解码*/func system() { s := "heal the world, make it a better place" fmt.Println("原始数据", s) //编码 s64_std := base64.StdEncoding.EncodeToString([]byte(s)) fmt.Println("编码", s64_std)原创 2020-10-13 17:49:33 · 497 阅读 · 0 评论 -
golang rpc
http_clientpackage mainimport ( "fmt" "log" "net/rpc")type Args struct { A, B int}type Quotient struct { Quo, Rem int}func main() { client, err := rpc.DialHTTP("tcp", "localhost:1234") if err != nil { log.Fatal("dialing:", err) } /原创 2020-10-13 17:41:55 · 158 阅读 · 0 评论 -
golang config(yaml)
package mainimport ( "fmt" "io/ioutil" "log" "gopkg.in/yaml.v2")type conf struct { Enabled bool `yaml:"enabled"` Port int32 `yaml:"port"` ServerName string `yaml:"server_name"` Timeout int64 `yaml:"timeout"`}func (c *conf) getC.原创 2020-10-13 17:38:58 · 831 阅读 · 0 评论 -
golang protobuf
1.安装protoc安装完后把bin下放入环境变量中 https://github.com/protocolbuffers/protobuf/releases protoc --version (查看当前版本) 2.安装protoc-gen-go go get -u github.com/golang/protobuf/protoc-gen-go (cmd输入) $GOPATH/bin (会自动存入这个目录,把这个目录也加入环境变量) 3.创建proto文件...原创 2020-10-12 16:51:26 · 203 阅读 · 0 评论 -
golang 安装笔记(windos)
1.环境变量国内包下载网站(下载sdk) https://studygolang.com/ 安装完后,会自动把go/bin加入环境变量中。 添加GO111MODULE =on (开启gomod使用,导入包用的) GOPATH =C:\object\goproject (本地包,项目地址) GOPROXY =https://mirrors.aliyun.com/goproxy (远程下载镜像)2.idea配置这里不要配置,不然和下面 go modules冲突3...原创 2020-10-12 10:29:37 · 233 阅读 · 0 评论 -
go 环境变量(别人的,只是方便自己翻阅)
本人安装Window系统下的Go语言的相关信息如下:Go语言版本:go1.14.6安装包:go1.14.6.windows-amd64.msi安装路径:D:Program FilesGoWin10系统下配置Go语言环境变量 打开Win10下的环境变量设置界面 右键我的电脑->属性->高级系统设置->环境变量。它有用户变量和系统变量。两者的区别是用户变量下配置只对当前用户有效,系统变量下配置对所有用户有效。本人建议在用户变量下配置。配置GOROOT选择&.转载 2020-10-10 19:09:53 · 414 阅读 · 0 评论 -
golang error、flag 15
errorvar write = errors.New("分母不能为0")/*通用处理方式*/func run(a int)(int,error) { if a == 0 { return 0,write } return 66 / a, nil}func main() { v, error := run(0) if error != nil { fmt.Println(v,error) return } fmt.Println(v)}flag原创 2020-10-09 17:43:55 · 182 阅读 · 0 评论 -
golang 日志(log) 14
var ( Trace *log.Logger Info *log.Logger Warning *log.Logger Error *log.Logger)func Init( traceHandle io.Writer, infoHandle io.Writer, warningHandle io.Writer, errorHandle io.Writer) { Trace = log.New(traceHandle,//日志存储 "TRACE: ",//前.原创 2020-10-09 17:42:01 · 320 阅读 · 0 评论 -
golang 线程安全(expvar、Cond、Map、Once、Pool) 13
1.expvar(公共变量,原子操作)var ( test = expvar.NewMap("Test") testInt = expvar.NewInt("TestInt"))func init() { test.Add("go", 10) test.Add("go1", 10)}/*http://localhost:8080/debug/vars可查看全局信息*/func main() { update() sock, err := net.Listen("tcp"原创 2020-10-09 10:51:35 · 540 阅读 · 1 评论 -
golang channel 12
1.启动设置运行线程数func main() { //获取服务器线程数 num := runtime.NumCPU() //设置运行线程数 runtime.GOMAXPROCS(num -1) fmt.Println("cpu",num -1)}2.go/*go test("并发") 理解为开的一个协程,主线程执行完毕时,协程也会跟着停止*/func main() { go test("并发") //不会输出(主线程执行完毕时,协程也会跟着停止) test("普通")原创 2020-09-24 19:53:35 · 4864 阅读 · 0 评论 -
golang defer、panic、recover、error 11
defer,panic,recover是很常用的三个特性,三者一起使用可以充当其他语言中try…catch…的角色1.defer/*deferdefer后边会接一个函数,但该函数不会立刻被执行,而是等到包含它的程序返回时defer函数才会被执行。通常用于资源释放、打印日志、异常捕获等*/func deferR()error { f, err := os.Open("filename") if err != nil { return err } /** * 还有些使用的类.原创 2020-09-24 19:45:04 · 301 阅读 · 0 评论 -
golang file 10
1.终端读写/*终端读写 (就是控制台操作)os.Stdin:标准输入os.Stdout: 标准输出os.Stderr:标准错误输出*/func DayRun() { buffer := bufio.NewReader(os.Stdin) s, err := buffer.ReadString('\n') if err == nil{ fmt.Println("s",s) }else { fmt.Println("err",err) }}2.文件读写Open原创 2020-09-24 19:33:45 · 296 阅读 · 0 评论 -
golang 接口interface 09
1.接口会自动和拥有相同方法的结构体关联/*只要一个变量,含有接口类型中的所有方法,那么这个变量就实现这个接口。如果一个变量含有了多个interface类型的方法,那么这个变量就实现了多个接口。*/type MyInterface interface{ GetName() string GetAge() int}type StringInterface interface{ SumAgeSa() int}type CommonInterface interface{ My.原创 2020-09-24 19:22:18 · 209 阅读 · 0 评论 -
golang 结构体struct 08
1.简单结构体/*普通结构体*/type Student struct { Name string Age int Score int}/*双向链表*/type List struct { Name string Next* List Prev* List}/*二叉树*/type Tree struct { Name string left* Tree right* Tree}2.创建/*make 用来创建map、slice、channel原创 2020-09-24 19:17:06 · 381 阅读 · 0 评论 -
golang 锁 07
/*互斥锁, var mu sync.Mutex 读和写频率一样的场景 */var hLock sync.Mutexfunc Lockh(){ //runTest1() runTest2()}func runTest1(){ ch := make(chan int) for i := 0; i < 10; i++ { go test(ch, i) } for i := 0; i < 10; i++ { <-ch }}func test(ch .原创 2020-09-19 18:00:48 · 91 阅读 · 0 评论 -
golang 数组、切片、map 06
1. close:主要用来关闭channel2. len:用来求长度,比如string、array、slice、map、channel3. new:用来分配内存,主要用来分配值类型,比如int、struct。返回的是指针4. make:用来分配内存,主要用来分配引用类型,比如chan、map、slice5. append:用来追加元素到数组、slice中6. panic和recover:用来做错误处理go get安装第三方包//数组func Array01() { lenN :=.原创 2020-09-19 17:59:13 · 411 阅读 · 0 评论 -
golang 函数 05
package base016import "fmt"func FunRun(){ sum,avg := calc(3,5) fmt.Println("FunRun", sum,avg) fmt.Println("FunRun", addMore(6,1,2,3,4)) a()}func a() { defer func() { fmt.Println("defer","1") }() defer func() { fmt.Println("defer","2") .原创 2020-09-19 10:16:21 · 99 阅读 · 0 评论 -
golang 字符串 04
package base016import ( "fmt" "strconv" "strings")func ChangeType(){ a := 5.0 // 转换为int类型 b := int(a) //int 转换成string str := strconv.Itoa(b) + "666" //bool 转换成string str1 := strconv.FormatBool(false) //字符串转换成 int ints, _ := strconv.Atoi(".原创 2020-09-19 10:14:26 · 166 阅读 · 0 评论 -
golang 时间循环、流程控制条件
package base016import ( "fmt" "math/rand" "strconv" "time")func BaseTime() { now := time.Now() fmt.Println("时间戳(秒):", now.Unix()) fmt.Println("时间戳(纳秒):", now.UnixNano()) fmt.Println("时间戳(毫秒):", now.UnixNano()/1e6) fmt.Println("时间戳(纳秒转毫秒):",.原创 2020-09-19 10:11:10 · 1497 阅读 · 0 评论 -
golang 基本类型02
1.常量const ( ca = iota //一个初始数字的函数,ca自动赋值0,cb=1,cc=2 cb cc)func value() { /* 常量 const修饰,初始化就必须赋值,只能读不能修改 const 只能修饰boolean,number和string 用法 const identifer[type] = value //type可以不写 */ const name = "helloworld" const Pi = 3.1415926 cons原创 2020-09-07 08:04:53 · 171 阅读 · 0 评论 -
golang 基础01
1.下载 go SDK 1.14 并安装2.添加一个环境变量原创 2020-09-06 23:35:12 · 368 阅读 · 0 评论