首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

从 Java 角度实践 Go 工程| 青训营笔记

对于很多程序来说,这种单线程情况很显然是不够用:考虑一个 Web 服务器程序,当我们与一个用户建立连接并进行通讯,如果有其他用户也想访问这个网站,那么他就必须等待这个用户和网站结束通讯!...主流语言都有自己支持,并提供了不同操作给开发者使用,诸如 Java 19 引入虚拟线程(Virtual Thread),Kotlin ,Rust,JavaScript 和 C# Async...Goroutine 是有栈,而不是如 Kotlin 那样无栈。...,修改为 1001 和 1002 并存回 i,这时当 1 将他拿到那个 1000 +1 并存回变量 i ,变量又变回了 1001,于是就产生了错误。...因此,程序上线前进行测试对于企业开发来说便是一个必要活动。 通常,有多种测试方法可以使用,例如回归测试,集成测试,单元测试,而单元测试(Unit Test)是成本最低,覆盖率最高测试方法。

25220

开源 | 从 SQLlin 更新看 Kotlin Multiplatform 技术更迭

但上述示例如果我们将对象 db(类型为 Database)多个线程(或运行在不同线程上)中共享,几乎必然会出现问题。...如果在多个线程/同事使用 db 对象,可以想象这可能会出现 SQL 语句拼接混乱问题,例如线程 A 和 线程 B 都在构建自己SQL 语句,由于没有同步机制,线程 B 子句可能被拼接到线程...A 已经创建出 SQL 语句后面,造成 SQL 语法错误。... Kotlin/Native 旧内存模型,对象是不能直接跨线程访问,必须要手动进行对象子图分离和再绑定操作,对象才能将自己所有权转移到另一个线程,这种设计其实是强制开发者在编译期就保证对象同一刻只能被一个线程访问...Mutex,因此自 1.2.2 版本起, sqllin-dsl 依赖 Kotlin 官方框架 kotlinx.coroutines。

16210
您找到你想要的搜索结果了吗?
是的
没有找到

【翻译】忘了RxJava吧——你需要是拥抱Kotlin(Part 12)

activity/fragment 中使用上面那个接口代码一般如下所示(稍后我会考虑对它进行单元测试): private fun attemptLoginRx() { val login =...想象一下,更复杂情形下这个数字会变成多少。 ? 堆栈信息可读性差 假设你代码犯了一个错误,或者疏忽了某些情形判断,然后这些问题在产品质量检查期间并没有被发现,之后产品投入生产。...RxJava 需要您为异步代码运行选择 Scheduler 调度,代码,类似的实体称为 Dispatcher 派发器。...版本,我们保存为 job ,然后同一个地方调用 job.cancel() 方法。请继续关注我即将发表文章中有关生命周期和协更多信息!...概要 好吧,在这里我们设法重构一些使用了 Singles 代码,替换为 Kotlin 并从中感受到一些好处。在此系列下一章节,我们将考虑使用来处理比 RxJava 更高级一些主题。

1.1K20

关于 Kotlin Coroutines, 你可能会犯 7 个错误

但是,我发现了许多开发者使用时会犯一些通用性错误。 1. 使用实例化一个新 Job 实例 有时候你会需要一个 job 来对进行一些操作,例如,稍后取消。...我们打破了结构化并发,因此当我们取消协作用域将不再被取消。 解决方式是直接使用 launch() 返回 job。...错误使用 SupervisorJob 有时候你会使用 SupervisorJob 来达到下面的效果: job 继承体系停止异常向上传播 当一个失败不影响其他同级 由于构建器 launch...尝试使用 try/catch 来处理异常 异常处理很复杂,我花了相当多时间才完全理解,并通过 博客[8] 和 讲座[9] 向其他开发者进行了解释。...使用 CoroutineExceptionHandler 再来一条简明扼要构建器中使用 CoroutineExceptionHandler 不会有任何效果。

89920

笔记

Kotlin中文文档解释是轻量级线程,Go、Python 等很多现成语言语言层面上都实现,不过Kotlin和他们不同是,Kotlin本质上只是一套基于原生Java线程池 封装,...操作数据库以及网络请求 Dispatchers.Default:适合 CPU 密集型任务,比如计算 Dispatchers.Unconfined:当我们不关心在哪个线程上被挂起使用 那我们怎么切换线程呢...,才子线程执行挂起函数 ; 如果在主线程启动 , 则该模式就会直接在主线程执行 ; 如果在子线程启动 , 则该模式就会直接在子线程执行 ; 异常处理 对于不同构造器...分别介绍 launch 和 async 情况下异常处理 Launch launch 方式启动,异常会在发生立刻抛出,使用 try catch 就可以将异常捕获。...或者framgent直接使用lifecycleScope进行启动

80030

KotlinKotlin 与 Java 互操作 ③ ( Kotlin 处理 Java 异常 | Java 处理 Kotlin 异常 | @Throws 注解处理异常 | 函数类型互相操作 )

: Xxx.XxException 错误信息 ; 抛出异常代码示例 : 该代码 exceptionDemo 函数 , 抛出了 IOException 异常 , Java 调用 exceptionDemo..." Decompile " 按钮 , 将字节码数据反编译成 Java 代码 ; 反编译后 Java 代码 , 存在 编译 错误 ; 4、Kotlin 捕获异常 Kotlin 可以...Kotlin 异常 ---- 1、Kotlin 方法抛出异常处理 Kotlin 函数 , 抛出异常 ; 如果 Kotlin 调用 抛出异常 Kotlin 函数 , 直接使用...().kotlinException(); } } 如果 使用 try…catch… 代码块 强行捕获 Kotlin 函数抛出异常 , 会出现编译错误 ; import java.io.IOException...@Throws 注解注明异常 如果 要在 Java 处理 Kotlin 抛出异常 , 那么 Kotlin 抛出异常函数 , 必须使用 @Throws 注解注明异常 ; @Throws 注解

1K10

Kotlin实现原理:ContinuationInterceptor&CoroutineDispatcher

自然ContinuationInterceptor作用也是用来做拦截。 下面来看下它实现。...大家是否还记得Kotlin实现原理系列第一篇文章,我们分析了CoroutineContext内部结构,当时提到了它plus方法,就是下面这段代码 public operator fun plus...另一个原因是ContinuationInterceptor使用很频繁,因为每次创建都会去尝试查找当前CoroutineContext是否存在ContinuationInterceptor。...大家不要忘了,每一个挂起后恢复都是通过回调resumeWith进行,然而外部launch我们进行了拦截,它返回ContinuationresumeWith回调总是会创建新thread...当然,如果你是Android中使用,那基本上是不需要自定义线程切换逻辑。因为kotlin已经为我们提供了日常所需Dispatchers。

1.6K10

再谈程之viewmodel-livedata难兄难弟

,几乎也都会同时提到它们,但是...当Flow稳定之后,这两个好兄弟就突然出现了隔阂,当然,其实隔阂绝不是一天就有的,这也许是压死LiveData最后一根稻草,Google开发者一篇公众号,就成了这跟稻草...,毕竟没法Java中使用)。...但这样还不够,当我ViewModel请求数据后,需要回调给Activity进行UI渲染,这里还需要一个观察者角色,当数据准备好之后,回调给Activity来执行后续操作,这就是LiveData...和ViewModel一样,Kotlin当然也不允许这样模板代码出现,所以,借助Ktx,我们同样来对其进行下简化,首先,需要引入全家桶另一个原味鸡: implementation "androidx.lifecycle...而且该构造器返回是一个不可变LiveData,可以直接暴露给对应UI层使用作用域中,可以通过emit()函数来更新LiveData数据。 这样整体流程就通了,而且,非常简单不是吗?

1K40

Google 推荐 MVVM 架构中使用 Kotlin Flow

是对 Kotlin 扩展,让我们可以像运行同步代码一样运行异步代码,使得代码更加简洁,提高了代码可读性 易于做单元测试 Kotlin Flow 如何在 MVVM 中使用 Jetpack 视图模型...Flow 是扩展,如果要在 Room 和 Retrofit 中使用,Room 和 Retrofit 需要支持才可以, Retrofit >= 2.6.0 和 Room >= 2.1 版本都支持...suspend 进行了修饰,只有被 suspend 修饰方法,才可以调用。...Kotlin Flow Repositories 使用 如果我们想在 Flow 中使用 Retrofit 或者 Room 进行网络请求或者查询数据库操作,我们需要将使用 suspend 修饰符操作放到...Observer { // 将数据显示页面上 }) 方式二: 使用 LiveData 构造方法 (coroutine builder) 提供代码块,产生是一个不可变 LiveData

4.1K20

Kotlin 总结

当我了解时候,不可避免会跟线程、进程做比较做分析,下面来贴个图便于理解 从 Android 开发者角度去理解它们关系: 我们所有的代码都是跑在线程,而线程是跑进程。...Android 系统上,如果在主线程进行网络请求,会抛出NetworkOnMainThreadException,对于主线程上也不例外,这种场景使用还是要切线程。...不过,我们学习 Kotlin ,一开始确实可以从线程控制角度来切入。因为 Kotlin 一个典型使用场景就是线程控制。...就像 Java Executor 和 Android AsyncTask,Kotlin 也有对 Thread API 封装,让我们可以写代码,不用关注多线程就能够很方便地写出并发操作...平台库包含代码主要是框架在具体平台具体实现方式。因为多线程各个平台实现方式是有所差异- 。 b.开始使用 最简单使用方法,其实在前面章节就已经看到了。

2.4K11

Android 开发中使用 | 上手指南

使用代码来手动追踪上千个是非常困难,您可以尝试对所有进行跟踪,手动确保它们都完成了或者都被取消了,那么代码会臃肿且易出错。... Android 平台上,我们可以使用结构化并发来做到以下三件事: 取消任务 —— 当某项任务不再需要时取消它; 追踪任务 —— 当任务正在执行时,追踪它; 发出错误信号 —— 当失败,发出错误信号表明有错误发生...借助 scope 来取消任务 Kotlin ,定义必须指定其 CoroutineScope 。CoroutineScope 可以对进行追踪,即使被挂起也是如此。...为了确保所有的都会被追踪,Kotlin 不允许没有使用 CoroutineScope 情况下启动新。...跟常规函数一样,您不仅可以使用 try/catch 这样方式来处理错误,还可以构建抽象来按照您喜欢方式进行错误处理。 但是,某些情况下,还是有可能会弄丢获取到错误

1.4K20

写给Android工程师指南

基础概念 标准解释,如下所示: 当我代码执行到某个位置,可以使用特定关键字来暂停函数执行,同时保存函数执行状态,这个过程叫做 [挂起],挂起操作会将控制器交还给调用方,调用方可以继续执行其他任务...当我挂起函数调用该函数,编译器就会将当前 continuation 也一并传入并获得当前函数结果。...矛与盾 当我讨论,首先要明确,我们是在说 Kotlin ,下述论点也都是基于这个背景下开始。...使用技巧 将设置为可取消 ,取消属于协作操作,也就是说,当我们cancel掉某个job之后,相应挂起与恢复之前并不会立即取消(原因是check时机是我们状态机每个步骤里...如果我们把视线向上提一级,就会理解,当我选用 Kotlin 时候,就已经选择了为了使用方便去容忍牺牲一部分性能。

1.3K40

Android 架构组件最新进展 (下篇)

根据 2019 年最新开发者调查,70% 以上专业开发者用过这五个库当中至少一个库进行应用开发。...为了让分页使用更加便捷,不久未来版本里我们将提供: 内置网络支持,而且提供错误处理机制 Header 和 Footer 支持 更好 RxJava 支持以及集成 Room 持久性库 Room...处理 Room 2.1 ,开发者可以通过 Kotlin 语言 suspend 关键字让 Room 生成正确代码,包括使用后台 dispatcher,这大大降低了开发者处理工作量:...Rx 支持 Room 2.1 ,您使用 insert, update, delete 方法能返回 Completable, Maybe 和 Single。...方面,则会加入 Channel 和 Flow 支持。

82020

试试Groovy进行单元测试

如果您今天正在编程,那么您很可能听说过单元测试或测试驱动开发过程。我还没有遇到一个既没有听说过又没有听说过单元测试并不重要程序员。随意讨论,大多数程序员似乎认为单元测试非常重要。...但是,当我开始使用代码并问“单元测试在哪里?”,我得到了一个完全不同故事。我最近在网上问我程序员朋友为什么不这样做,以及为什么其他程序员不这样做呢?不要编写单元测试。...当我问程序员或IT经理同样问题,我经常听到第一答案是:“我没有时间”或类似的问题。通常会出现这样论点,即使用单元测试编写应用程序要比不使用单元测试编写时间长20%,并且“我们受到时间限制”。...我建议–当我尝试解决时间不足问题,也许我们可以娱乐性上做出一些贡献。...输入Groovy 之前文章,我已经介绍了我好朋友Groovy编程语言。让我们看看是否可以进行Groovy测试。

98110

Swoole 4.4 正式版已发布

废弃原因: PostgreSQL 使用了异步回调方式实现调度, 不符合目前内核统一规划。...另外 PostgreSQL 目前用户量非常低, 并且缺少必要单元测试, 无法保证质量 Runtime::enableCoroutine 不再会自动兼容内外环境, 一旦开启, 则一切阻塞操作必须在内调用...将废弃 Lock 模块,废弃原因:模式下加锁可能存在问题,可使用 chan 实现版本锁 由于引入了 stream_socket_pair 化, 建议开启hook, 如有单独配置需求,...MySQL 客户端驱动, 底层全面化 (#2538) (@twose) 底层使用 C++ 和协编程模式(同步阻塞写法, 异步性能) 支持SSL连接 (connect配置 ['ssl' =>...) (@twose) 不再允许使用 Channel 调度操作 (519b6043) (@twose) WebSocket 握手失败切断连接 (#2510) (@twose) Linux

93520

开源|携机票 App KMM 跨端 KV 存储库 MMKV-Kotlin

2.2 初始化 MMKV 使用前需要进行初始化,由于 MMKV-Android 强依赖于 Context 类型,因此 MMKV-Kotlin 初始化 API 两端有所区别,需要在 Android...5.1 API 功能测试 Kotlin 提供了一套 kotlin-test 单元测试框架,可以 common 与 iOS source set 中使用。...针对每种具体数据类型测试都独立 testXXX 函数内,针对正常写读、读空值以及读空值默认值是否生效三种情况进行了测试。...但考虑到 Kotlin/Native iOS 单平台开发好像并不存在实际使用场景和需求,因此 MMKV-Kotlin 文档并没有将这几个 klib 依赖代码列出。...若 MMKV 或 Kotlin 进行了升级,MMKV-Kotlin 未来都会进行跟进升级,请使用者确保 MMKV-Kotlin 依赖 MMKV 或 Kotlin 版本与您使用版本兼容。

1.6K20
领券