Go linux 实践2
今天,看看GO的高级语言特性-方法和接口
废话不多说,直接上代码
*************************************************
1 package main
2
3 import (
4 "fmt"
5 "math"
6 )
7
8 type Vertex struct {
9 X, Y float64
10 }
11
12 func (v *Vertex) Abs() float64 {
13 return math.Sqrt(v.X*v.X + v.Y*v.Y)
14 }
15
16 func (v Vertex) Scale(f float64) {
17 v.X = v.X * f
18 v.Y = v.Y * f
19 fmt.Println("v.X:", v.X, "v.Y:", v.Y)
20 }
21
22 type MyFloat float64
23
24 func (f MyFloat) Abs() float64 {
25 if f < 0 {
26 return float64(-f)
27 }
28 return float64(f)
29 }
30
31 type Abser interface {
32 Abs() float64
33 }
34
35 type MyImple struct {
36 data []int
37 }
38
39 func (f *MyImple) Read(b *[]int) (n int, err int) {
40 len := len(f.data)
41 tmp := make([]int, len)
42 *b = tmp
43 copy(*b, f.data)
44 return len, 0
45 }
46
47 func (f *MyImple) Write(b []int) (n int, err int) {
48 len := len(b)
49 tmp := make([]int, len)
50 copy(tmp, b)
51 f.data = tmp
52 return len, 0
53 }
54
55 func main() {
56 v := &Vertex{3, 4}
57 fmt.Println(v.Abs())
58 v.Scale(5)
59 fmt.Println(v)
60 f := MyFloat(-math.Sqrt2)
61 fmt.Println(f.Abs())
62 var a Abser
63 f1 := MyFloat(-math.Sqrt2)
64 v1 := Vertex{3, 4}
65 a = f1
66 fmt.Println(a.Abs())
67 a = &v1
68 fmt.Println(a.Abs())
69
70 type Read interface {
71 Read(b *[]int) (n int, err int)
72 }
73 type Write interface {
74 Write(b []int) (n int, err int)
75 }
76 type ReadWrite interface {
77 Read
78 Write
79 }
80 var t_data []int = []int{
81 1, 2, 3, 4, 5, 6,
82 }
83 var rw ReadWrite
84 var imple MyImple
85 rw = &imple
86 rw.Write(t_data)
87 var t_data_re []int
88 rw.Read(&t_data_re)
89 fmt.Println(t_data_re)
90 }
********************************
./test-go-advance
运行结果
5
v.X: 15 v.Y: 20
&{3 4}
1.4142135623730951
1.4142135623730951
5
[1 2 3 4 5 6]
Go linux 实践2的更多相关文章
- linux实践之程序破解
linux实践之程序破解 这次的实践是文件破解,让我们从login可执行文件开始吧! 首先我们执行一下这个可执行程序 ①我们希望在不知道密码的情况下,能够登陆进去.且无论密码是什么,都是提示“on y ...
- linux实践之ELF文件分析
linux实践之ELF文件分析 下面开始elf文件的分析. 我们首先编写一个简单的C代码. 编译链接生成可执行文件. 首先,查看scn15elf.o文件的详细信息. 以16进制形式查看scn15elf ...
- 其他综合-使用Xshell远程连接管理Linux实践
使用Xshell远程连接管理Linux实践 1. Xshell整体优化 1)点击 工具 ,然后选择 选项 2)在 常规 选项中,下面的存放路径根据个人爱好修改(可选默认) 3)在 更新 选项中,将 √ ...
- 其它综合-使用Putty远程连接管理Linux实践
使用Putty远程连接管理Linux实践 1.获取putty 获取 putty有很多方法,以下是我为大家提供的下载地址: 个人网盘地址,提取码:tz83 官方下载地址 解释: 官方下载的是 zip 压 ...
- 【实践报告】Linux实践三
Linux实践——程序破解 一.掌握NOP.JNE.JE.JMP.CMP汇编指令的机器码 NOP:NOP指令即“空指令”.执行到NOP指令时,CPU什么也不做,仅仅当做一个指令执行过去并继续执行NOP ...
- Linux实践:文件破解
Linux实践:文件破解 标签(空格分隔): 20135321余佳源 一.掌握NOP.JNE.JE.JMP.CMP汇编指令的机器码 NOP:NOP指令即"空指令".执行到NOP指令 ...
- [Linux实践] macOS平台Homebrew更新brew update卡死,完美解决
[Linux实践] macOS 平台 Homebrew 更新 brew update 卡死,完美解决 版本2020.01.05 摘要: 使用brew install [软件包]安装软件包时,卡在Upd ...
- Memcached+PHP+Mysql+Linux 实践
首先确保你的服务器环境已经具备了memcached和lamp,关于在Linux上搭建memcahced+php环境可以参考我的另外一篇帖子( http://www.cnblogs.com/codeAB ...
- 【实践报告】Linux实践四
Linux内核分析 实践四——ELF文件格式分析 一.概述 1.ELF全称Executable and Linkable Format,可执行连接格式,ELF格式的文件用于存储Linux程序.ELF文 ...
- Linux实践:模块
标签(空格分隔): 20135321余佳源 一.实践原理 Linux模块是一些可以作为独立程序来编译的函数和数据类型的集合.之所以提供模块机制,是因为Linux本身是一个单内核.单内核由于所有内容都集 ...
随机推荐
- zabbix监控告警Received empty response from Zabbix Agent Assuming that agent dropped connection
zabbix监控告警Received empty response from Zabbix Agent Assuming that agent dropped connection错误 查看zabbi ...
- [No0000115]打开Excel2016提示内存或磁盘空间不足的解决方法
症状: 法一:右键文件,并 解除锁定: 法二: 在系统的服务中查看Windows Firewall服务 和Windows Update服务是否开启,如果没有开启就把他们启动一下. 1.在桌面的[计算机 ...
- [security][modsecurity] modsecurity 规则说明/中文/转发
原文转发以防丢失. 地址: http://www.catssec.com:8090/exploit/?p=691 转来细读之后,并没有太多的参考价值 :( modsecurity规则手册 通用格式 ...
- day1_jmeter接口测试
一.Jmeter-http接口脚本: 步骤: 1.添加线程组 2.添加http请求 3.在http请求中写入接口url.路径.请求方式.参数 4.添加查看结果树 5.调用接口.查看返回值 二.Jmet ...
- Java之旅_高级教_集合框架
摘自:http://www.runoob.com/java/java-collections.html Java 集合框架 早在Java2之前,java 就提供了特设类.比如:Dictionary,V ...
- codechef Sum of Cubes 图论
正解:图论+数学 解题报告: 先放个传送门QwQ 然后放下题目大意?就说给定简单图,无自环或重边,然后求(∑e[i][j])k,i,j∈S,S为点集的子集 然后因为k的取值只有[1,3],所以这里分类 ...
- 数据库级别DML操作监控审计、表触发器/对象触发器
使用触发器记录DML,使用触发器记录表的DML 数据库级别DML操作监控审计.表触发器/对象触发器 --创建记录表 CREATE TABLE T_SHALL_LOG ( ID , ) , EVTIME ...
- (1.8)mysql中的trace
(1.8)mysql中的trace 以json格式存储
- git出现warning: LF will be replaced by CRLF的解决方法
今天ytkah用git上传文件的时候出现了warning: LF will be replaced by CRLF的错误,具体信息如下,这是因为跨平台开发下产生的.由于编辑器的不同或者Windows程 ...
- 张小龙2018PRO版微信公开课演讲全文 透露2018微信全新计划
大家好!我是张小龙.欢迎大家来到微信公开课. 刚刚出现的是我打游戏的画面,被大家看到了,那个不是我最好的水平,因为有点紧张,我最高分曾打到6000多分.当然我是练习了很久了,并不是我比大家更厉害,而是 ...