当前位置: 首页 > news >正文

PHP 初学 GO 学习笔记

说要学GO,但是总是三天打鱼,两天晒网的,既然如此就记录到博客上,这样既能督促自己,也能随时查看自己学习的进度。

[2023-09-20]

Go 语言最少有个 main() 函数。

iota : 特殊常量,可理解为 const 语句块中的行索引

& 参与运算的两数各对应的二进位相[]

| 参与运算的两数各对应的二进位相[]

^ 参与运算的两数各对应的二进位相[]

<< 二进制左移,相当于乘以[2^n]

>> 二进制右移, 相当于除以[2^n]

A = 0011 1100

B = 0000 1101

-----------------

A&B = 0000 1100

A|B = 0011 1101

A^B = 0011 0001

package mainimport "fmt"var a,b int = 60 , 15
var c int
func init() {c = (a<<2)&b
}func main() {add := func(a,b int) int {return a+b}result := add(a,b)fmt.Println(a,"+",b,"=",result)multi := func(a,b int) int {return a*b}result = multi(a,b)fmt.Println(a,"*",b,"=",result)fmt.Println(a<<2)fmt.Println(c)fmt.Println("Hello, World!")
}

[2023-09-21]

题外话:php也有左移,用法跟go一样,以前一直没用过,刚看完左移,就来了一个这样的场景:有一个物联网模块判断数量的就是用到的左移。

看了都是一些基本的用法,跟大部分语言大差不差,这里值得注意的是数组的用法,在php中没有发现数组长度必须是固定的,但是go的数组长度是不可改变的,这时候就需要用到切片,切片是对数组的抽象,所以可以理解为一个动态数组,

按照之前的经验,觉得可能最常用到的循环还是range 对 map(集合) 的循环,相当于php的foreach吧。

	var numbers []int // 这时候是一个空切片,len=0,cap=0numbers = append(numbers, 2,3,4) // 追加元素fmt.Println("numbers[1:最后一个] ==", numbers[1:]) // numbers[1:最后一个] == [3 4]fmt.Println("numbers[第一个:3] ==", numbers[:3]) // numbers[第一个:3] == [2 3 4]numbers1 := make([]int, len(numbers), (cap(numbers))*2) // 定义之前两倍容量的切片/* 拷贝 numbers 的内容到 numbers1 */copy(numbers1,numbers)printSlice(numbers1)  m := map[string]int{"apple": 1,"banana": 2,"orange": 3,}// 遍历 Map,相当于php中的foreach($m as $k=>$v)for k, v := range m {fmt.Printf("key=%s, value=%d\n", k, v)}

[2023-09-22]

interface(接口)应该算是学习go最重要的一个环节了,学习go目前是为了做接口,那这个就是最需要理解透彻的一个东西了,要用好interface就需要回顾下前两天看到的一个叫结构体的东西,那时候看了也是一眼扫过,觉得就是类似与模型。

在菜鸟教程中接口给的案例并没有很直观的给出结构体和接口的关系,当然这是我个人脑子不转的原因,所以没看出来。后来在网上看了下别人写的案例,才大概清楚。

这里有一个特殊需要记忆的点,就是可以用空白标识符 _ 来忽略错误返回,避免报错

package mainimport "fmt"// Api 定义接口
type Api interface {GetName() stringGetIdcode() string
}// Mode 定义类型
type Mode struct {Name stringIdcode string
}func (s Mode) GetName()  string{return s.Name
}
func (s Mode) GetIdcode()  string{return s.Idcode
}func main() {var s Mode //等同于 var s = new(Mode) ?s.Idcode = "X00001"s.Name = "小明"var api Apiapi = s fmt.Printf("name:%s,idcode: %s\n", api.GetName(), api.GetIdcode())
}

说实话我php的interface用得比较少,大部分项目都是自己独立完成,很多方面可能都是按照自己的习惯去完成,这次看完以后觉得php的interface可以有很多实用的场景,比如我写了一个类,我可以定义多个interface,让user只能用这个类的A,B方法,admin可以用这个类的C,D方法,具体看下之后的项目会不会有实际运用到的情况,这里贴上上面代码对应的PHP代码

<?php
interface Api {public function getName();public function getIdcode();
}class Mode implements Api {public $Name;public $Idcode;public function getName() {return $this->Name;}public function getIdcode() {return $this->Idcode;}
}$s = new Mode();
$s->Idcode = "X00001";
$s->Name = "小明";
$api = $s;
printf("name:%s,idcode: %s\n", $api->getName(), $api->getIdcode());
?>

http://www.lryc.cn/news/175397.html

相关文章:

  • 前端制作
  • 扩散模型:DDPM代码的学习(基于minist数据集)
  • 小程序-uniapp:URL Link / 适用于在移动端 从短信、邮件、微信外网页 等场景打开小程序任意页面
  • 干货 | 基于在线监控数据的非现场监管问题识别模型研究
  • Spring Cloud Alibaba Gateway 简单使用
  • 两种fifo实现方式的差异
  • 孜然单授权系统V1.0[免费使用]
  • kubernetes问题(一)-异常事件
  • Android Jetpack组件架构 :LiveData的使用和原理
  • 【学习笔记】Prufer序列
  • 由于找不到msvcr110.dll的5种解决方法
  • 最长连续递增子序列
  • Java学习星球,十月集训,五大赛道(文末送书)
  • 前端VUE---JS实现数据的模糊搜索
  • Android Studio 的android.jar文件在哪儿
  • Elasticsearch 部署学习
  • nodejs 如何在npm发布自己的包 <记录>
  • 移植RTOS的大体思路
  • FPGA到底是什么?
  • 算法-单词搜索 II
  • 怒刷LeetCode的第15天(Java版)
  • Android开发MVP架构记录
  • day2作业
  • Python办公自动化之Word
  • 力扣26:删除有序数组中的重复项
  • 基于C#的AE二次开发之IQueryFilter接口、ISpatialFilter接口、IQueryDef 接口的查询接口的介绍
  • Oracle 11g RAC部署笔记
  • Redis 字符串操作实战(全)
  • python LeetCode 88 刷题记录
  • 基于 Socket 网络编程