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

Go 复制代码
package main

import "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吧。

Go 复制代码
	var numbers []int // 这时候是一个空切片,len=0,cap=0
	numbers = 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就需要回顾下前两天看到的一个叫结构体的东西,那时候看了也是一眼扫过,觉得就是类似与模型。

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

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

Go 复制代码
package main

import "fmt"

// Api 定义接口
type Api interface {
	GetName() string
	GetIdcode() string
}

// Mode 定义类型
type Mode struct {
	Name string
	Idcode 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 Api
	api = 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 复制代码
<?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());
?>
相关推荐
马可家的菠萝41 分钟前
你收藏的资料,有多少真的被你第二次打开过?
笔记·知识管理·效率提升·个人知识库
小刘在重生~2 小时前
Java Lock 显式锁案例|ReentrantLock 解决多线程安全问题(超详细实战)
java·笔记·面试
职豚求职小程序2 小时前
中国人寿27秋招笔试[特殊字符]北森机考|备考攻略
笔记
江湖人称菠萝包2 小时前
【Qt】《Qt 5.9 C++开发指南》笔记-Chapter9-Qt Charts
笔记·qt·qt5
乐橙开放平台2 小时前
从「多套客户端」到一套开放能力:乐橙视频监控能力复盘
笔记·物联网·自动化·音视频·智能家居
AI职业加油站2 小时前
数据要素价值释放年:大数据治理工程师,站上职业新风口
人工智能·学习·职场和发展·数据分析·职场发展
啄缘之间3 小时前
1.【SVA】什么是SVA?
经验分享·学习·测试用例·verilog·sva
山岚的运维笔记3 小时前
mysql 专业笔记 -- 第 36 章:MySQL 管理
运维·数据库·笔记·后端·mysql·oracle·dba
sunoo-2293 小时前
【嵌入式裸机开发Day04】i.MX6ULL 蜂鸣器驱动详解:从引脚地址查找到代码实现全流程
arm开发·单片机·嵌入式硬件·学习·串口·裸机
Purple Coder4 小时前
stm32
学习