【Golang入门】Golang第一天心得

生活所迫,入门一下Go

  1. 很奇葩的第一点,接口
package mainimport ("fmt"
)// 定义一个接口
type Shape interface {Area() float64
}// 定义一个矩形类型
type Rectangle struct {Width  float64Height float64
}// 矩形类型实现Shape接口的Area方法
func (r Rectangle) Area() float64 {return r.Width * r.Height
}// 定义一个圆形类型
type Circle struct {Radius float64
}// 圆形类型实现Shape接口的Area方法
func (c Circle) Area() float64 {return 3.14159265359 * c.Radius * c.Radius
}func main() {// 创建一个矩形对象rectangle := Rectangle{Width: 4, Height: 5}// 创建一个圆形对象circle := Circle{Radius: 3}// 使用接口来计算不同形状的面积shapes := []Shape{rectangle, circle}for _, shape := range shapes {fmt.Printf("Area of the shape is: %.2f\n", shape.Area())}
}

gpt这么解释: Go语言中的接口实现是隐式的,而不是明确的。这意味着你不需要显式声明一个类型实现了某个接口,只要这个类型提供了接口中定义的所有方法,它就被认为实现了该接口。这是Go语言的一种灵活而简洁的设计。

  1. 奇葩的第二点:没有for in,但是有range
    奇葩的第三点:数组的写法
func main() {rec := Rectangle{width: 2.0, height: 3.0}cir := Circle{radius: 2.0}shapes := []Shape{rec, cir}for index, shapes := range shapes {fmt.Println(index, shapes.Area())}}
  1. 奇葩的第四点:方法依靠方法名决定权限:public or private
    大写开头的方法为public,可以被外部调用;小写开头则为private,不能被外部调用
    ● 如果方法名以大写字母开头(例如GetName),则该方法是公开的,可以在包外部访问。
    ● 如果方法名以小写字母开头(例如calculate),则该方法是私有的,只能在同一包内部访问,不能在包外部访问。
package shapefunc Description(name string) string {return "The person name is: " + name
}
func secretName(name string) string {return "Do not share"
}

4 . 奇葩第五点:错误处理。这一点也是早有耳闻了。

func main() {resp, err := http.Get("http://example.com")if err != nil {fmt.Println(err)//return}fmt.Println(resp)num := 5if inc, err := Increment(num); err != nil {fmt.Printf("failed number: %v, error message: %v\n", inc, err)} else {fmt.Printf("increment successfully, num is %v \n", inc)}
}func Increment(n int) (int, error) {if n < 0 {return n, errors.New("error")}return n + 1, nil
}
  1. go最精彩的点:Go routine, 可以与另一个函数并发执行
func main() {go task()fmt.Println("main")time.Sleep(time.Second * 2)}func task() {fmt.Println("concurrent")
}

go channel:在两个go routine之间传递数据。 写法也挺怪的。

package mainimport "fmt"func main(){c := make(chan string) // 创建channel, 可以发送string类型的数据go func(){ c <- "hello" }() // 发送端msg := <-c //  接收端fmt.Println(msg)
}

让创建的goroutine发送数据:

package mainimport ("fmt"
)func main() {ch := make(chan string)go sc(ch)fmt.Println(<-ch)
}// sc函数:只能发送数据给 channel,不能接收数据
func sc(ch chan<- string) {ch <- "hello"
}

select等待多个channel:select +case ,只有一个会执行

select {
case <-channel1:// 从channel1接收到数据时执行的代码
case data := <-channel2:// 从channel2接收到数据时执行的代码
case channel3 <- value:// 将value发送到channel3时执行的代码
default:// 如果没有通道操作准备就绪,执行的默认操作
}
package mainimport ("fmt""time"
)func main() {ch1 := make(chan string)ch2 := make(chan string)go func() {time.Sleep(2 * time.Second)ch1 <- "Message from channel 1"}()go func() {time.Sleep(1 * time.Second)ch2 <- "Message from channel 2"}()select {case msg1 := <-ch1:fmt.Println(msg1)case msg2 := <-ch2:fmt.Println(msg2)}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/78519.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Codeforces Round 895 (Div. 3) A ~ F

Dashboard - Codeforces Round 895 (Div. 3) - Codeforces A 问多少次能使a 和 b相等&#xff0c;就是abs(a - b) / 2除c向上取整&#xff0c;也就是abs(a - b)除2c向上取整。 #include<bits/stdc.h> #define IOS ios::sync_with_stdio(0);cin.tie(0);cout.tie(0); #de…

学习网络编程No.6【将服务器日志和守护进程化】

引言&#xff1a; 北京时间&#xff1a;2023/9/1/21:15&#xff0c;下午刚更新完博客&#xff0c;同理再接再厉&#xff0c;这样整天不需要干什么&#xff0c;除了玩手机的日子不多了&#xff0c;马上就要开学&#xff0c;每天需要签到签退的日子就要来临&#xff0c;烦躁&…

浅谈STL|STL函数对象篇

一.函数对象概念 概念: 重载函数调用操作符的类&#xff0c;其对象常称为函数对象 函数对象使用重载的()时&#xff0c;行为类似函数调用&#xff0c;也叫仿函数 本质: 函数对象(仿函数)是一个类&#xff0c;不是一个函数 特点 函数对象在使用时&#xff0c;可以像普通函数那…

Linux提权

shell分本地shell 和 webshell 有些提权方式只能本地shell使用 常见内核漏洞查找脚本以及利用 环境变量提权 suid https://www.cnblogs.com/banglook/archive/2022/03/17/16019354.html linux特殊命令https://www.secrss.com/articles/28493 什么是suid SUID (Set UID)是Li…

「中秋来袭」没想到,用OpenCV竟能画出这么漂亮的月饼「附源码」

一、前言 中秋佳节即将来临&#xff0c;作为传统的中国节日之一&#xff0c;人们除了品尝美味的月饼、赏月外&#xff0c;还喜欢通过绘画来表达对这个节日的喜悦和祝福。而如今&#xff0c;随着科技的不断发展&#xff0c;竟然可以借助计算机视觉库OpenCV来绘制精美的月饼和可…

Redis的数据持久化方案

目录 前言 RDB方式 概述&#xff1a; 1.RDB手动 &#xff12;.RDB自动 RDB优缺点 AOF方式 概述 AOF写数据的三种策略 AOF相关配置 AOF重写 AOF重写方式 手动重写 bgrewriteaof 自动重写 总结 前言 Redis是一个内存型数据库&#xff0c;也就是说如果不将内存中的…

被删除并且被回收站清空的文件如何找回

文件的意外删除和回收站清空是许多用户面临的普遍问题。这种情况下&#xff0c;很多人会感到无助和焦虑&#xff0c;担心自己的重要文件永远丢失。然而&#xff0c;幸运的是&#xff0c;依然存在一些有效的方法能够帮助我们找回被删除并且被回收站清空的文件。 ▌被删除文件在…

uniapp——实现聊天室功能——技能提升

这里写目录标题 效果图聊天室功能代码——html部分代码——js部分代码——其他部分 首先声明一点&#xff1a;下面的内容是从一个uniapp的程序中摘录的&#xff0c;并非本人所写&#xff0c;先做记录&#xff0c;以免后续遇到相似需求抓耳挠腮。 效果图 聊天室功能 发送图片 …

进制转换问题

进制 二进制 &#xff08;Binary&#xff09;&#xff1a;0、1。简写为B 八进制&#xff08;Octonary&#xff09;&#xff1a;0、1、2、3、4、5、6、7。简写为O 十进制&#xff08;decimalism&#xff09;&#xff1a;0、1、2、3、4、5、6、7、8、9 简写为D 十六进制&#xff…

代码随想录算法训练营完结篇 ★★★

代码随想录 ★★★ 文档讲解 &#xff1a; 代码随想录 状态&#xff1a;★★★&#xff1a;需要多次重新回顾&#xff01; 不知不觉60天刷过去了&#xff0c;曾经也想着放弃&#xff0c;也觉得没啥意义&#xff0c;但是最后还是坚持下来了。完结撒花&#xff01;接下来就是继续…

socket编程

网络编程 网络编程的步骤常用APITCP中的accept和connect和listen的关系UDP中的connect广播和组播过程服务端大量TIMEWAIT或CLOSEWAIT状态复位报文段RST优雅关闭和半关闭解决TCP粘包select可以判断网络断开吗send和read的阻塞和非阻塞情况网络字节序和主机序IP地址分类及转换sel…

MySQL 子查询

文章目录 1.简介2.优势3.分类3.1 标量子查询3.2 行子查询3.3 列子查询IN 操作符ALL 操作符ANY/SOME 操作符 3.4 表子查询 4.关联子查询5.EXISTS 和 NOT EXISTS6.横向派生表7.附录参考文献 1.简介 子查询是另一个语句中的 SELECT 语句。 子查询也称为内查询&#xff08;Inner …

【建议收藏】职场人口头和书面沟通必备词语,瞬间高大上

这年头&#xff0c;在职场不但要会做&#xff0c;还要会说。 会说还不能平铺直叙的说&#xff0c;还要能把普通的工作说出话来&#xff0c;这就需要一些“考究”的用词。尤其是在某些头部企业的带领下&#xff0c;业务不够、产品不行、解决方案不够新&#xff0c;就用华丽的辞…

OAK相机:启动报错X_LINK_DEVICE_NOT_FOUND

OAK相机&#xff1a;启动报错X_LINK_DEVICE_NOT_FOUND 环境报错原因与解决未设置 udev 规则USB崩溃排线接触不良或相机模块时钟干扰 环境 硬件&#xff1a; 4✖️OV9782相机模组OAK-FFC-4P驱动模组笔记本电脑 软件&#xff1a; Ubuntu18.04python 3.9depthai 2.21.2.0 报错…

ASEMI二极管1N4148(T4)的用途和使用建议

编辑-Z 二极管是一种常见的电子元件&#xff0c;其中1N4148&#xff08;T4&#xff09;是一款广泛使用的快恢复二极管。它具有快速的开关特性和高反向阻挡能力&#xff0c;适用于多种电子应用。本文将介绍1N4148&#xff08;T4&#xff09;的特点、用途和如何正确使用该二极管…

如何使用极狐GitLab 支持 ISO 27001 合规

目录 组织控制 技术控制 了解更多 本文来源&#xff1a;about.gitlab.com 作者&#xff1a;Joseph Longo 译者&#xff1a;武让 极狐GitLab 高级解决方案架构师 作为一体化平台&#xff0c;通过极狐GitLab 可以很容易实现 DevSecOps 全生命周期管理。极狐GitLab 使开发人员能…

无涯教程-JavaScript - FALSE函数

描述 FALSE函数返回逻辑值FALSE。 语法 FALSE () 争论 FALSE函数没有参数。 Notes 您还可以在工作表或公式中直接键入FALSE单词,Microsoft Excel会将其解释为逻辑值FALSE。 提供FALSE功能主要是为了与其他电子表格程序兼容。 适用性 Excel 2007,Excel 2010,Excel 2013…

webhook--详解(gitee 推送)

一、简介 webhook 是一种基于 HTTP 的回调函数&#xff0c;可在 2 个应用编程接口&#xff08;API&#xff09;之间实现轻量级的事件驱动通信。是一种新型的前后端交互方式&#xff0c;一种对客户端-服务器模式的逆转&#xff0c;在传统方法中&#xff0c;客户端从服务器请求数…

怎样做一个简易而温馨的原木风居室空间

由 balbek bureau 设计的 Relogged 是一座重新设计的私人住宅&#xff0c;位于乌克兰河岸的绿化区。顾名思义&#xff0c;该项目重新诠释了木屋的概念&#xff0c;并与充满自然气息的环境相呼应&#xff0c;营造出宁静舒适的生活氛围。在探索重新设计的木屋实例时&#xff0c;建…

设计模式:享元模式

设计模式&#xff1a;享元模式 什么是享元模式 首先我们需要简单了解一下什么是享元模式。享元模式(Flyweight Pattern):主要用于减少创建对象的数量&#xff0c;以减少内存占用和提高性能。享元模式的重点就在这个享字&#xff0c;通过一些共享技术来减少对象的创建&#xff…