今天,看看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的更多相关文章

  1. linux实践之程序破解

    linux实践之程序破解 这次的实践是文件破解,让我们从login可执行文件开始吧! 首先我们执行一下这个可执行程序 ①我们希望在不知道密码的情况下,能够登陆进去.且无论密码是什么,都是提示“on y ...

  2. linux实践之ELF文件分析

    linux实践之ELF文件分析 下面开始elf文件的分析. 我们首先编写一个简单的C代码. 编译链接生成可执行文件. 首先,查看scn15elf.o文件的详细信息. 以16进制形式查看scn15elf ...

  3. 其他综合-使用Xshell远程连接管理Linux实践

    使用Xshell远程连接管理Linux实践 1. Xshell整体优化 1)点击 工具 ,然后选择 选项 2)在 常规 选项中,下面的存放路径根据个人爱好修改(可选默认) 3)在 更新 选项中,将 √ ...

  4. 其它综合-使用Putty远程连接管理Linux实践

    使用Putty远程连接管理Linux实践 1.获取putty 获取 putty有很多方法,以下是我为大家提供的下载地址: 个人网盘地址,提取码:tz83 官方下载地址 解释: 官方下载的是 zip 压 ...

  5. 【实践报告】Linux实践三

    Linux实践——程序破解 一.掌握NOP.JNE.JE.JMP.CMP汇编指令的机器码 NOP:NOP指令即“空指令”.执行到NOP指令时,CPU什么也不做,仅仅当做一个指令执行过去并继续执行NOP ...

  6. Linux实践:文件破解

    Linux实践:文件破解 标签(空格分隔): 20135321余佳源 一.掌握NOP.JNE.JE.JMP.CMP汇编指令的机器码 NOP:NOP指令即"空指令".执行到NOP指令 ...

  7. [Linux实践] macOS平台Homebrew更新brew update卡死,完美解决

    [Linux实践] macOS 平台 Homebrew 更新 brew update 卡死,完美解决 版本2020.01.05 摘要: 使用brew install [软件包]安装软件包时,卡在Upd ...

  8. Memcached+PHP+Mysql+Linux 实践

    首先确保你的服务器环境已经具备了memcached和lamp,关于在Linux上搭建memcahced+php环境可以参考我的另外一篇帖子( http://www.cnblogs.com/codeAB ...

  9. 【实践报告】Linux实践四

    Linux内核分析 实践四——ELF文件格式分析 一.概述 1.ELF全称Executable and Linkable Format,可执行连接格式,ELF格式的文件用于存储Linux程序.ELF文 ...

  10. Linux实践:模块

    标签(空格分隔): 20135321余佳源 一.实践原理 Linux模块是一些可以作为独立程序来编译的函数和数据类型的集合.之所以提供模块机制,是因为Linux本身是一个单内核.单内核由于所有内容都集 ...

随机推荐

  1. ubuntu16.04安装kinetic调用gazebo_control解决方案

    解决方案 sudo apt-get install ros-kinetic-gazebo-ros-control

  2. Codeforces 977F - Consecutive Subsequence - [map优化DP]

    题目链接:http://codeforces.com/problemset/problem/977/F 题意: 给定一个长度为 $n$ 的整数序列 $a[1 \sim n]$,要求你找到一个它最长的一 ...

  3. MVC模型和MVT模型

    MVC 大部分开发平台都需要搭建的后台框架,Java和PHP最为喜爱 M:model.     模型.      主要用于对数据库层的封装 V:view.        视图.      用于对用户展 ...

  4. [daily][archlinux][pacman] 删除所有孤立包(orphan)

    ‎[:] ‎<‎tong‎>‎ sudo pacman -Rsun `pacman -Qdt |cut -d` ‎[:] ‎<‎tong‎>‎ 我每次都这么删, 有没有高级点的 ...

  5. 《mongoDB》查询

    一:简单查询 db.collection.find(query, projection) - query :可选,使用查询操作符指定查询条件 - projection :可选,使用投影操作符指定返回的 ...

  6. java常用工具所在的包

    org.apache.commons.lang3:1)StringUtils.isBlank org.springframework.util:1)ResourceUtils.getFile(&quo ...

  7. spring.schemas和spring.handlers对xmlns配置文件作用

    在很多情况下,我们需要为系统提供可配置化支持,简单的做法可以直接基于Spring的标准Bean来配置,但配置较为复杂或者需要更多丰富控制的 时候,会显得非常笨拙.一般的做法会用原生态的方式去解析定义好 ...

  8. http请求的基本介绍

    响应码 1xx:接收到请求并且继续处理  ,这个是一瞬间的状态,一般不关注 2xx:请求已被接收,理解,处理,表示正确 3xx:请求重定向 4xx:客户请求语法错误或者请求资源不存在,这个是客户端错误 ...

  9. Webpack 入门(转)

    原文:https://www.runoob.com/w3cnote/webpack-tutorial.html Webpack 是一个前端资源加载/打包工具.它将根据模块的依赖关系进行静态分析,然后将 ...

  10. Requirejs 使用

    代码地址 参考地址1 参考地址2 一.不依赖其他模块的module创建 创建math的module // math.js define(function (){ var add = function ...