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

手机网站做的比较好的/公司企业网站制作需要多少钱

手机网站做的比较好的,公司企业网站制作需要多少钱,赣州新闻联播直播,做视频点播网站如何赚钱本文是java学习者学go种产生的容易记混点的笔记,所以有其他编译语言的基础更好 go的方法有点像js 基础 func main() {fmt.Println("Starting")var p *string new(string)*p "hello world"demo : "demo"fmt.Println(*&demo) //这样既然也…

本文是java学习者学go种产生的容易记混点的笔记,所以有其他编译语言的基础更好

go的方法有点像js

基础

func main() {fmt.Println("Starting")var p *string = new(string)*p = "hello world"demo := "demo"fmt.Println(*&demo) //这样既然也可以  &得到地址 也就是指针 在通过取值操作 得到数据fmt.Println(*p)for i := 0; i < 10; i++ {fmt.Println(i)if i == 5 {return //结束程序}}fmt.Println("Ending")}
多参数 多返回值形式

func add(a, b int) int {return a + b
}
func add(a, b int) int,int {return a + b,b
}
可变参数

形参部分是slice 动态数组

func add( b ...int) int {return 1
}

之所以可以不用写;就是因为底层go做了优化 所以定义方法时候 {必须跟在方法名字之后

细节-方法的传值

方法的参数传递分为值传递和引用传递(go种的引用传递是通过地址 /指针等方式)
值传递:实际形式参数接收的是数据的拷贝
引用传递:传递的是数据的引用,在函数内修改这个参数,原来的数据也会改变
为了简单记得,只要记得下下面的类型都是引用传递,其他都是值传递既可

  • 切片
  • 指针/地址
  • 映射
  • 通道
  • 接口

基本就是复合类型加上指针接口 (函数虽然也是存储地址(函数体)的数据类型,但是作为参数也是把这个函数体地址作为值传递拷贝)所以想到达引用传递的效果就需要传递函数的地址(觉得头晕可见含后文)

在java种类传递的对象也是引用传递 但是在go中并不是,go种定义类是结构体的形式,然后创建实列对象有多种方法,只有使用new关键字会返回指针这个时候实列对象名字才是引用,其他方式实列的结构体的是数据本身

/*
*
只有下面的类型是引用传递 传递数据 修改数据会影响到原来的数据 其他的只可以通过传递地址指针实现方法修改元数据
理解引用传递
*/
package mainimport "fmt"// 1. 指针(Pointers)
func modifyValue(x *int) {*x = 42
}// 2. 切片(Slices)
func modifySlice(s []int) {s[0] = 42
}// 3. 映射(Maps)
func modifyMap(m map[string]int) {m["key"] = 42
}// 4. 通道(Channels)
func send(ch chan int) {ch <- 42
}// 5. 函数(Functions)
func callFunction(f func(int) int, x int) int {return f(x)
}func square(n int) int {return n * n
}// 6. 接口(Interfaces)
type Modifier interface {Modify()
}type Data struct {Value int
}func (d *Data) Modify() {d.Value = 42
}func modifyInterface(m Modifier) {m.Modify()
}func main() {// 测试指针a := 10fmt.Println("之前 (Pointer):", a)modifyValue(&a)fmt.Println("修改后 (Pointer):", a)// 测试切片b := []int{1, 2, 3}fmt.Println("之前 (Slice):", b)modifySlice(b)fmt.Println("修改后 (Slice):", b)// 测试映射c := map[string]int{"key": 1}fmt.Println("之前 (Map):", c)modifyMap(c)fmt.Println("修改后 (Map):", c)// 测试通道ch := make(chan int)go send(ch)fmt.Println("Received (Channel):", <-ch)// 测试接口d := &Data{Value: 10}fmt.Println("之前 (Interface):", d.Value)modifyInterface(d)fmt.Println("修改后 (Interface):", d.Value)
}

函数式编程

首先在go种,函数也可以作为参数以及返回值存在 为此就要介绍其他语言也有的匿名函数

匿名函数

func main() {a := 2//匿名函数的使用func(a *int) {container := []int{1, 2, 3, 4, 5}for _, value := range container {if value%2 == 0 {fmt.Println(value)}}}(&a) //即可调用b := func() int {return 1}()fmt.Println(b)f := func() int {fmt.Println("hello world")return 1}f()}

当然匿名参数存在的作用就是可以作为回调函数传参

值得注意的函数类型作为传递时候 申明格式就和go正常申明一样,但是申明go作为参数传递时候,这个时候的参数和返回值只需要申明类型即可


func main(){
r := opation(2, 3, func(a int, b int) int {return a*100 + b})
}
/*
*
主要用途是函数式编程 作用函数的参数和返回值类型可以省略,可以直接使用匿名函数
·回调函数 作为参数只需要申明返回值和参数类型即可
*/
func opation(a, b int, callback func(int, int) int) int {return callback(a, b)
}

闭包函数

首先解释闭包:

闭包(Closure)函数是一种函数,它可以访问其词法作用域(定义时的作用域)之外的变量。换句话说,闭包可以在其函数体内引用定义在函数外部的变量。这些变量称为自由变量。

/*
bitwiseIncrementer 是一个闭包函数,它返回一个函数,该函数每次调用时都会返回一个自增后的整数。
因为返回的函数引用了一个方法的变量 所以这个变量不会s被垃圾回收 所以这个函数可以一直使用
*/
func increment() func() int {a := 0f := func() int {a++return a}return f
}

main.go

	ff := increment()fmt.Println(ff)fmt.Println(&ff)v1 := ff()fmt.Println(v1)v2 := ff()fmt.Println(v2)又调用了一个新的闭包函数 创建了新的内存空间 所以这个i也是新生成额变量ff2 := increment()fmt.Println(ff2())

猜猜会输出什么
在这里插入图片描述
流程是 :第一个函数返回了一个函数,而这个函数是闭包函数,正常来说函数使用后就被gc垃圾回收,但是由于返回的这个函数引用了这个变量,所以不会被gc,所以多次调用,自增还是改变的这个数据,而有再次调用这个代码得到一个自增函数时候,这个代码块的内容又是重新建立在新内存空间的,其中引用的a 又是新开辟的内存 所以又是1

那么输出这俩个自增函数

fmt.Println(ff)fmt.Println(ff2)

发现这俩个变量 不一样
在这里插入图片描述

函数类型深入

细心的可以发现,感觉函数和指针一样,装的数据是地址,指针装的是变量地址,而函数装的就是代码快的地址
由此可以再次测试

	// 定义函数变量funcdemo1 := func() {fmt.Println("funcdemo1")}funcdemo2 := func() {fmt.Println("funcdemo2")}// 打印函数的指针地址fmt.Printf("函数代码块的地址 %p\n", funcdemo1)fmt.Printf("函数的地址 %p\n", &funcdemo1)

输出
在这里插入图片描述
可以证实,函数的值就是代码块的地址,而也可以对这个函数取地址
感觉和指针一样,指针也是装载地址的数据类型,也可以对指针取地址

	funcdemo1 := func() {fmt.Println("funcdemo1")}funcdemo2 := func() {fmt.Println("funcdemo2")}a := 12P := &afmt.Println("对地址取指针的取值操作", *&a)fmt.Println("指针的数值", P)fmt.Println("指针的地址", &P)// 打印函数的指针地址fmt.Printf("函数代码块的地址 %p\n", funcdemo1)fmt.Printf("函数的地址 %p\n", &funcdemo1)

在这里插入图片描述
既然知道了这个底层,那么就可以实现俩个函数交换函数体

func main() {// 定义函数变量funcdemo1 := func() {fmt.Println("funcdemo1")}funcdemo2 := func() {fmt.Println("funcdemo2")}swapfunc(&funcdemo1, &funcdemo2)// 现在 funcdemo1 应该调用原来 funcdemo2 的内容funcdemo1() // 现在会调用 funcdemo2
}
func swapfunc(a, b *func()) {//调用传递的参数(*a)() //先对指针取值得到函数体然后执行fmt.Printf("之前的地址: a: %p, b: %p\n", *a, *b)*a, *b = *b, *a // 交换引用fmt.Printf("之后的地址: a: %p, b: %p\n", *a, *b)
}

确实是交换了函数体,这点和二重指针一样的,通过指针地址改变指针中装的地址,这里通过函数地址改变函数中装的函数体地址
在这里插入图片描述
而这样就不行

func swapfunc(a, b func()) {//调用传递的参数(a)()fmt.Printf("之前代码的地址: a: %p, b: %p\n", a, b)a, b = b, a // 交换引用fmt.Printf("之后的地址: a: %p, b: %p\n", a, b)
}

传递函数作为参数是,是值拷贝,传递的只是把形参作为副本,形参值是函数体的值,但是形参的地址不是传递的哪个函数地址,所以修改存储的函数体原来的函数不会改变,改变的只是形参
同理如果想要改变指针保存的地址,那么也是需要参数传递指针的地址

细节,如果是在最外部申明的函数,无法取地址
这样就会报错

func main() {//函数本身就是引用类型 无需地址符号即可提取地址fmt.Printf("函数的地址%T\n", funcdemo1)fmt.Printf("函数的地址%p\n", &funcdemo1)swapfunc(funcdemo1, funcdemo2)funcdemo1()}
func funcdemo1() {fmt.Println("funcdemo1")
}
func funcdemo2() {fmt.Println("funcdemo2")
}

相关文章:

go中的方法 func-----数据类型

本文是java学习者学go种产生的容易记混点的笔记,所以有其他编译语言的基础更好 go的方法有点像js 基础 func main() {fmt.Println("Starting")var p *string new(string)*p "hello world"demo : "demo"fmt.Println(*&demo) //这样既然也…...

408计算机网络--物理层

一、物理层概述 物理层是干嘛使得&#xff1f; 物理层解决如何在连接各种计算机的传输媒体上传输数据比特流&#xff0c;而不是指具体的传输媒体。 物理层主要任务是确定与传输媒体接口有关的一些特性。定义标准可以理解为插排上的两孔三孔 机械特性&#xff1a;定义物理连接…...

十年,亚马逊云科技合作伙伴网络开启AI新征程

“十年之前&#xff0c;你不认识我&#xff0c;我不认识你&#xff0c;因为云计算我们携手并肩&#xff1b;十年之后&#xff0c;我们仍是伙伴&#xff0c;更是朋友&#xff0c;因为人工智能再次起程。”这就是今天的亚马逊云科技与其合作伙伴的真实写照。 2024年是亚马逊云科技…...

基于Spring Boot的在线医疗咨询平台的设计与实现【附源码】

基于Spring Boot的在线医疗咨询平台的设计与实现 Design and implementation of the computer hardware mall based on Spring Boot Candidate&#xff1a; Supervisor&#xff1a; April 20th, 2024 学位论文原创性声明 本人郑重声明&#xff1a;所呈交的论文是本人在导师…...

星坤Type-A连接器:创新快充技术,引领电子连接!

快速发展的电子时代&#xff0c;消费者对电子设备的性能和便利性有着更高的要求。特别是在充电和数据传输方面&#xff0c;快充技术和高速传输已成为市场的新宠。中国星坤公司推出的Type-A连接器系列&#xff0c;以其卓越的性能和创新的设计&#xff0c;满足了市场对高效、稳定…...

入门JavaWeb之 Response 下载文件

web 服务器接收到客户端的 http 请求 针对这个请求&#xff0c;分别创建一个代表请求的 HttpServletRequest 对象&#xff0c;代表响应的 HttpServletResponse 对象 获取客户端请求过来的参数&#xff1a;HttpServletRequest 给客户端响应一些信息&#xff1a;HttpServletRe…...

Java自定义注解校验token并直接返回给前端状态

自定义注解 CheckToken import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target;Target(ElementType.METHOD) Retention(RetentionPolicy.RUNTIME) public int…...

C++ | Leetcode C++题解之第200题岛屿数量

题目&#xff1a; 题解&#xff1a; class Solution { private:void dfs(vector<vector<char>>& grid, int r, int c) {int nr grid.size();int nc grid[0].size();grid[r][c] 0;if (r - 1 > 0 && grid[r-1][c] 1) dfs(grid, r - 1, c);if (r …...

Linux安全配置

Linux系统审计信息有&#xff1a;系统启动日志&#xff08;boot.log&#xff09;、记录用户执行命令日志&#xff08;acct/pacct&#xff09;、记录使用su命令的使用&#xff08;sulog&#xff09;、记录当前登录的用户信息&#xff08;utmp&#xff09;、用户每次登陆和退出信…...

vue实现不预览PDF的情况下打印pdf文件

前景&#xff1a;默认情况&#xff0c;实现打印需要根据预览的内容进行打印。 但是当只有打印按钮存在&#xff0c;不预览文件内容的情况下&#xff0c;实现打印的话&#xff0c;可以通过后端接口返回服务器上PDF的地址,前端通过隐藏的iframe标签中src可实现预览功能 主要是根据…...

C++ | Leetcode C++题解之第199题二叉树的右视图

题目&#xff1a; 题解&#xff1a; class Solution { public:vector<int> rightSideView(TreeNode* root) {unordered_map<int, int> rightmostValueAtDepth;int max_depth -1;stack<TreeNode*> nodeStack;stack<int> depthStack;nodeStack.push(ro…...

[leetcode]圆圈中最后剩下的数字/ 破冰游戏

. - 力扣&#xff08;LeetCode&#xff09; class Solution {int f(int num, int target) {if (num 1) {return 0;}int x f(num - 1, target);return (target x) % num;} public:int iceBreakingGame(int num, int target) {return f(num, target);} };...

mysql数据库的管理

目录 一、常用的数据类型 二、MySQ数据库基础操作 1、登录数据库 2、查看当前的 MySQL 版本信息及连接用户名 3、查看当前服务器中的数据库 4&#xff0e;查看数据库中包含的表 5&#xff0e;查看表的结构&#xff08;字段&#xff09; 6、MySQL的6大约束属性 三、SQL…...

Java项目分层(持续更新中)

第一次更新时间2024.6.26 分包 实体类 功能类 工具类 分层 实体类层 我们要操作的对象&#xff0c;Book,Student... 控制层 控制请求转发 业务层 处理业务 数据层 连接数据库 处理数据 工具类层 JDBC等工具类 测试层 最终启动项目 明确我们所要做的业务之后&a…...

2024年软件测试面试题大全【答案+文档】

&#x1f345; 视频学习&#xff1a;文末有免费的配套视频可观看 &#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 一、面试基础题 简述测试流程&#xff1a; 1、阅读相关技术文档&#xff08;如产品PRD、UI设计…...

数据赋能(131)——体系:数据转换——概述、关注焦点

概述 数据转换是指将数据从一种格式、结构或类型转换为另一种格式、结构或类型的过程。 数据转换操作属于数据整理过程。 它通常涉及数据清洗、数据映射、数据合并、数据拆分等操作&#xff0c;以确保数据的正确性和一致性。 数据转换的目的在于将原始数据转换为更易于处理…...

【自然语言处理系列】掌握jieba分词器:从基础到实战,深入文本分析与词云图展示

本文旨在全面介绍jieba分词器的功能与应用&#xff0c;从分词器的基本情况入手&#xff0c;逐步解析全模式与精确模式的不同应用场景。文章进一步指导读者如何通过添加自定义词典优化分词效果&#xff0c;以及如何利用jieba分词器进行关键词抽取和词性标注&#xff0c;为后续的…...

TikTok短视频矩阵系统

随着数字化时代的到来&#xff0c;短视频已成为人们获取信息、娱乐消遣的重要渠道。TikTok&#xff0c;作为全球最受欢迎的短视频平台之一&#xff0c;其背后的短视频矩阵系统是支撑其成功的关键因素。本文将深入探讨TikTok短视频矩阵系统的构成、功能以及它在新媒体时代中的影…...

码题杯:我会修改图

原题链接&#xff1a;码题集OJ-我会修改图​​​​​​ 题目大意&#xff1a;给你一张n个点&#xff08;编号为1∼n&#xff09;&#xff0c;m条边&#xff08;编号为1∼m&#xff09;的无向图&#xff0c;图上每个点都有一个点权&#xff0c;权值分别为a1​,a2​,…,an​&…...

MongoDB Map-Reduce 简介

MongoDB Map-Reduce 简介 MongoDB 是一个流行的 NoSQL 数据库&#xff0c;它使用文档存储数据&#xff0c;这些数据以 JSON 格式存储。MongoDB 提供了多种数据处理方法&#xff0c;其中 Map-Reduce 是一种用于批量处理和聚合数据的功能强大的工具。Map-Reduce 允许用户对大量数…...

某平台小程序逆向思路整理

一、下载软件 devtools 二、强制打开控制台 根据返回的数据我们得知数据被加密了 找到这个加密的js 发现加密的位置 打断点进入这个加密的方法 之后自定义js。python调用解密即可。...

黑马苍穹外卖6 清理redis缓存+Spring Cache+购物车的增删改查

缓存菜品 后端服务都去查询数据库&#xff0c;对数据库访问压力增大。 解决方式&#xff1a;使用redis来缓存菜品&#xff0c;用内存比磁盘性能更高。 key :dish_分类id String key “dish_” categoryId; RestController("userDishController") RequestMapping…...

鸿蒙开发系统基础能力:【@ohos.systemTime (设置系统时间)】

设置系统时间 本模块用来设置、获取当前系统时间&#xff0c;设置、获取当前系统日期和设置、获取当前系统时区。 说明&#xff1a; 本模块首批接口从API version 7开始支持。后续版本的新增接口&#xff0c;采用上角标单独标记接口的起始版本。 导入模块 import systemTime …...

CVE-2020-26048(文件上传+SQL注入)

简介 CuppaCMS是一套内容管理系统&#xff08;CMS&#xff09;。 CuppaCMS 2019-11-12之前版本存在安全漏洞&#xff0c;攻击者可利用该漏洞在图像扩展内上传恶意文件&#xff0c;通过使用文件管理器提供的重命名函数的自定义请求&#xff0c;可以将图像扩展修改为PHP&#xf…...

【面试题】信息系统安全运维要做什么

信息系统安全运维是确保信息系统稳定、可靠、安全运行的一系列活动和措施。 其主要包括以下几个方面&#xff1a; 1.系统监控&#xff1a; 实时监测信息系统的运行状态&#xff0c;如服务器的性能指标、网络流量、应用程序的运行情况等。通过监控工具&#xff0c;及时发现系统…...

引导过程与服务器控制

一、引导过程 1.开机自检 服务器主机开机以后&#xff0c;将根据主板 BIOS 中的设置对 CPU&#xff08;Central Processing Unit&#xff0c; 中央处理器&#xff09;、内存、显卡、键盘等设备进行初步检测&#xff0c;检测成功后根据预设的启动顺序移 交系统控制权&#xff0c…...

前置章节-熟悉Python、Numpy、SciPy和matplotlib

目录 一、编程环境-使用jupyter notebook 1.下载homebrew包管理工具 2.安装Python环境 3.安装jupyter 4.下载Anaconda使用conda 5.使用conda设置虚拟环境 二、学习Python基础 1.快排的Python实现 (1)列表推导-一种创建列表的简洁方式 (2)列表相加 2.基本数据类型及运…...

在Ubuntu上安装和配置配置服务器防火墙(CSF)的方法

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。 简介 Config Server Firewall&#xff08;CSF&#xff09;是大多数 Linux 发行版和基于 Linux 的 VPS 的免费高级防火墙。除了基本的防…...

Python-井字棋

井字棋 1.设计登录界面1.1导入需要的工具包1.2窗口显示1.3登录界面图片显示1.6标签按钮输入框显示 2.登录功能实现2.1用户数据存储 2.2登录和注册2.2.1登录功能实现2.2.2注册功能实现 3.井字棋游戏3.1 导入需要的工具包3.2 窗口显示3.2 按钮标签显示3.3 棋盘设置初始状态3.4 游…...

39.客户端与服务端断开事件handler

客户端与服务端断开有两种情况&#xff1a; 1.正常断开&#xff0c;客户端调用了ctx.channel().close(); 2.异常断开&#xff0c;比如客户端挂掉了 服务端定义handler来处理连接断开情况下要进行的逻辑操作&#xff1a; package com.xkj.server.handler;import com.xkj.ser…...