五月六号日报

今日学习内容

1Go语言中的结构(struct)与方法(method)

结构体是复合类型,当需要定义一个类型,它由一系列属性组成,每个属性都有自己的类型和值的时候,就应该使用结构体,它把数据聚集在一起。

1.1结构体定义

type identifier struct {
    field1 type1
    field2 type2
}

使用 new 函数给一个新的结构体变量分配内存,它返回指向已分配内存的指针:var t *T = new(T)

package main
import "fmt"

type struct1 struct {
    i1  int
    f1  float32
    str string
}

func main() {
    ms := new(struct1)
    ms.i1 = 10
    ms.f1 = 15.5
    ms.str= "Chris"

    fmt.Printf("The int is: %d\n", ms.i1)
    fmt.Printf("The float is: %f\n", ms.f1)
    fmt.Printf("The string is: %s\n", ms.str)
    fmt.Println(ms)
}

还可以采用的初始化方式为ms:=&struct1{10,3.3,"test"}

1.2使用自定义包中的结构体

目录结构如下

package structPack

type ExpStruct struct {
    Mi1 int
    Mf1 float32
}
package main

import(
    "./structPack"
    "fmt"
)

func main() {
    struct1 := new(structPack.ExpStruct)
    struct1.Mi1=0
    struct1.Mf1=16.3

    fmt.Printf("Mi1 = %d\n", struct1.Mi1)
    fmt.Printf("Mf1 = %f\n", struct1.Mf1)
}

1.3带标签的结构体:结构体中的字段除了有名字和类型外,还可以有一个可选的标签(tag):它是一个附属于字段的字符串,可以是文档或其他的重要标记,标签的内容不可以在一般的编程中使用,只有包 reflect 能获取它,在一个变量上调用 reflect.TypeOf() 可以获取变量的正确类型,如果变量是一个结构体类型,就可以通过 Field 来索引结构体的字段,然后就可以使用 Tag 属性。

package main

import(
    "fmt"
    "reflect"
)

type TagType struct {
    field1 bool "An important answer"
    field2 string "The name of the thing"
    field3 int "How much there are"
}

func main() {
    tt:=TagType{(true),"Barak obama",1}
    for i:=0;i<3;i++{
        refTag(tt,i)
    }
}

func refTag(tt TagType, ix int){
    ttType:=reflect.TypeOf(tt)
    ixField:=ttType.Field(ix)
    fmt.Printf("%v\n", ixField.Tag)
}

1.4匿名字段与内嵌结构体:结构体可以包含一个或多个 匿名(或内嵌)字段,即这些字段没有显式的名字,只有字段的类型是必须的,此时类型就是字段的名字。匿名字段本身可以是一个结构体类型,即 结构体可以包含内嵌结构体

package main

import "fmt"

type A struct {
    ax,ay int
}

type B struct {
    A
    bx, by int
}

func main() {
    b:=B{A{1,2},3.0,4.0}
    fmt.Println(b.ax, b.ay, b.bx, b.by)
    fmt.Print(b.A)

}

1.4方法:格式为func (recv receiver_type) methodName(parameter_list) (return_value_list) { ... }

package main

import "fmt"

type TwoInts struct {
    a int
    b int
}

func main() {
    two1:=new(TwoInts)

    two1.a = 12
    two1.b = 10

    fmt.Printf("The sum is: %d\n", two1.AddThem())
    fmt.Printf("Add them to the param: %d\n", two1.AddToParam(20))

    two2 := TwoInts{3, 4}
    fmt.Printf("The sum is: %d\n", two2.AddThem())
}

func (tn *TwoInts) AddThem() int{
    return tn.a+tn.b
}

func (tn *TwoInts) AddToParam(parm int) int{
    return tn.a+tn.b+parm
}

1.4.1函数和方法的区别:函数将变量作为参数:Function1(recv),方法在变量上被调用:recv.Method1()

1.4.2多重继承:多重继承指的是类型获得多个父类型行为的能力,它在传统的面向对象语言中通常是不被实现的。因为在类继承层次中,多重继承会给编译器引入额外的复杂度。但是在 Go 语言中,通过在类型中嵌入所有必要的父类型,可以很简单的实现多重继承。

package main

import (
    "fmt"
)
type Camera struct{}

func (c *Camera) TakeAPicture() string{
    return "click"
}

type Phone struct{}

func (p *Phone) Call() string{
    return "Ring Ring"
}

type CameraPhone struct {
    Camera
    Phone
}

func main() {
    cp := new(CameraPhone)
    fmt.Println("Our new CameraPhone exhibits multiple behaviors...")
    fmt.Println("It exhibits behavior of a Camera: ", cp.TakeAPicture())
    fmt.Println("It works like a Phone too: ", cp.Call())
}

UDP ping程序:

使用Python编写一个客户ping程序,该客户发送一个简单的Ping报文,接收一个从服务器返回的报文,并确定客户发送ping报文到接收报文为止的时延。

服务器端代码UDPPingServer.py

from socket import *
import  random

#创建一个UDP套接字
serverSocket=socket(AF_INET,SOCK_DGRAM)
#绑定IP地址和端口号
serverSocket.bind(('',12000))
while True:
    #随机生成1-10数字
    rand=random.randint(0,10)
    #接收来自客户端的IP地址和数据包
    message,address=serverSocket.recvfrom(1024)
    message=message.upper()
    #如果数字小于4 考虑丢弃
    if rand < 4:
        continue
    #否则服务端响应
    serverSocket.sendto(message,address)

客户端代码UDPPinger.py

from socket import*
import  time

#服务器地址
serverName='45.78.44.224'
#服务器端口
serverPort =12000
#创建UDP套接字
clientSocket=socket(AF_INET,SOCK_DGRAM)
#设置超时时间
clientSocket.settimeout(1)

for i in range(0,10):
    sendTime =time.time()
    # 生成数据报,编码为bytes以便发送
    message=('Ping %d %s' % (i+1,sendTime)).encode()
    try:
        #将消息发送到服务器
        clientSocket.sendto(message,(serverName,serverPort))
        # 从服务器接收信息,同时也能得到服务器地址
        modifiedMessage,serverAddress=clientSocket.recvfrom(1024)
        #计算往返时间
        rtt=time.time()-sendTime
        # 显示信息
        print('Sequence %d: Reply from %s    RTT = %.3fs' % (i + 1, serverName, rtt))
    except Exception as e:
        print('Sequence %d: Request timed out' % (i + 1))
#关闭套接字
clientSocket.close()

效果如下

原文地址:https://www.cnblogs.com/swtczb/p/11632545.html

时间: 2024-11-08 01:27:54

五月六号日报的相关文章

五月七号日报

今日学习内容 Go语言中的接口与反射 1.1接口概念:通过它可以实现很多面向对象的特性.接口提供了一种方式来 说明 对象的行为 package main import "fmt" type stockPosition struct { ticker string sharePrice float32 count float32 } func(s stockPosition) getValue() float32{ return s.sharePrice*s.count } type c

四月十六号日报

今日学习内容 VSCode下Go语言的安装与配置 由于发现在Linux终端下写代码不是很方便,遂在Windows下配置开发环境 安装步骤 Go下载地址:Golang VSCode下载地址:VSCode 下载完成后安装一路默认就好了(安装路径可以自己设置) 注意事项: Go安装完成后可以在cmd中输入来安装是否正确 go version go env VSCode设置:当打开VSCode后新建一个后缀名为.go的文件,VSCode会提示自动安装Go插件,在文件中输入以下代码 package mai

五月五号日报

今日学习内容 1Web服务器 开发一个处理一个HTTP请求的Web服务器.Web服务器应该接受并解析HTTP请求,然后从服务器的文件系统获取所请求的文件,创建一个由响应文件组成的HTTP响应消息,前面是首部行,然后将响应直接发送给客户端.如果请求的文件不存在于服务器中,则服务器应该向客户端发送"404 Not Found"差错报文. from socket import * serverSocket = socket(AF_INET,SOCK_STREAM)#创建TCP套接字 serv

一月十六号学习日报

日期:2020-01-16 作者:老夫秀吉 @雨人网安 一月十六号学习日报 今天又是平淡而又充(ku)实(zao)的一天,讲了一天的OverTheWire题目.学到了很多Linux的基础命令.而且经过了这么多的练习,已经跨过了纸上谈兵的步骤._(:3」∠)_我听得无(hun)法(hun)自(yu)拔(shui),喝了几杯咖啡才让自己冷静下来.其实学习就是这么一个过程吧,加油! 午讲是脱口秀...啊啊啊啊啊啊!羡慕!虽然话题扯得不知道到哪里去了,但是不妨碍他牛*.下午继续,重复重复重复,学习学习学

团队任务5:项目总结-六号拯救地球小分队

06号团队-团队任务5:项目总结会 2.说明团队信息.在文章开头给出团队序号.开发的软件名称.今日整理人姓名与学号以及在团队中的职务. 团队信息:06号团队[拯救地球小分队] 开发的软件:飞机大战 今日整理人:马双双 学号为:2017035107083 在团队中的职务:产品经理 3.给出团队项目的代码仓库地址.列出团队所有软件工程师的代码仓库地址并标注哪个是主仓库. 代码仓库地址:https://gitee.com/yi545454/seflash/tree/软件工程师开发 4.给出团队会议的时

四月二十五号日报

今日学习内容 Go语言的控制结构 1.1if-else结构:关键字if和else之后左大括号{必须和关键字在同一行,如果你使用了 else-if 结构,则前段代码块的右大括号 } 必须和 else-if 关键字在同一行.这两条规则都是被编译器强制规定的. if condition { //代码 } else if condition{ //代码 }else{ //代码 } if可以包含一个初始化语句(比如给一个变量赋值)这种写法具有固定的格式(在初始化语句后必须加上分号),但要注意的是,使用简短

四月十二号日报

今日学习内容 关于TCP与UDP服务 TCP服务模型是面向连接的服务:在应用层数据报文开始流动之前,TCP让客户和服务器互相交换运输层控制信息.也提供可靠的数据传送服务:通信进程能够依靠TCP,无差错,按适当顺序交付所有发送的数据.TCP协议还具有拥塞控制机制. UDP是一种不提供不必要服务的轻量级运输协议,它仅提供最小的服务,UDP是无连接的,因此在两个进程通信前没有握手过程.UDP协议提供一种不可靠的数据传送服务,也就是说到大接收进程的报文也有可能是乱序的,UDP没有拥塞控制机制. Linu

829号日报总结及思考

1.格力和天猫的战略合作.利用格力电器的核心科技与天猫大数据相结合,针对用户,制定出适应性的,更合适的产品. 2.阿里新零售,新布局.在社区,针对居民购物习惯,卖相应货品.商家可以更合理的进行管理. 3.苏宁无人店主要提高了支付环节,减少消费者的排队时间,给用户更好的体验.应用到了人脸识别,RFID射频技术.同时,对于用户进行分类.如果用户在某样商品前站的很久,但没买,可以主动由系统向他推荐.但是存在误识别率,对于人脸识别,用户进去时候,需要站在人脸识别仪器的位置.不然的话,会出现无故扣费的情况

广州地铁3条新线明日开通 六号线二期串起&quot;最美氧吧&quot;m

印度总体上仍对中国维持战略守势,我们不需被印度互联网上类似"中国会被吓得像老鼠一样颤抖"的极端言论给忽悠了.中国互联网上也有针对印度的激进言论,两边网民半斤八两,我们不必在意. "原本要18个月才能打开的门,我帮他们两个月就能打开:他们原本可能要跌倒10次,现在只要跌倒3次就可以了."曾宪章笑着说,他做这所有一切的想法很简单,那就是为真正热爱创新创业的人指一条捷径. 多家美国媒体同日证实了这一消息.据台湾"中央社"1月3日综合外电报道,警方尚未就